我有一个列表TRADE
,其中包含大量的data.frames。我需要对每个data.frames执行相同的数据操作。假设这个操作可以写成FUNCTION(initial.value, dataframe...)
。如何通过列表中的元素传递结果?
但我不能用apply()
家庭,因为对贸易的功能使用的initial.amount [I + 1]是FUNCTION
上TRADE[[i]]
计算的final.amount。
我被告知REDUCE()
功能可以通过列表中间结果。我读了几个相关的例子,但不知道如何使用我的情况。
下面提供了一个简化的例子。有谁能提出一些建议吗?
ACLS <- data.frame(TICKER = c("ACLS", "ACLS", "ACLS"),
MIDQUOTE = c(11.05, 11.05, 11.05),
TradeSize = c(500, 153, 1247),
TradePrice = c(11.099, 11.080, 11.120))
A <- data.frame(TICKER = c("A", "A", "A"),
MIDQUOTE = c(37.075, 37.075, 37.075),
TradeSize = c(100, 1000, 500),
TradePrice = c(36.75, 36.00, 37.49))
AAPL <- data.frame(TICKER = c("AAPL", "AAPL", "AAPL"),
MIDQUOTE = c(23.56, 23.56, 23.56),
TradeSize = c(100, 100, 102),
TradePrice = c(23.600, 23.650, 23.650))
TRADE <- list(ACLS, A, AAPL)
单独data.frame资本从贸易计算的存储值:
CAPITAL <- data.frame(matrix(nrow = length(TRADE), ncol = 5))
names(CAPITAL) <- c("intial.amount","buy.amount","sell.amount","profit", "final.amount")
CAPITAL[1,1] <- 30000
数据操作步骤:
for(i in 1:length(TRADE)){
initial.amount <- CAPITAL[i,1]
buy.amount <- TRADE[[i]]$TradePrice[1]*TRADE[[i]]$TradeSize[1]
sell.amount <- TRADE[[i]]$TradePrice[3]*TRADE[[i]]$TradeSize[3]
profit <- sell.amount - buy.amount
final.amount <- initial.amount + profit
record <- c(buy.amount, sell.amount, profit, final.amount)
CAPITAL[i, 2:5] <- record
CAPITAL[i+1, 1] <- CAPITAL[i, 5]
}
我们可以从这个循环看到final.amount从TRADE[[i]]
将作为TRADE[[i+1]]
的初始金额通过。但如何与REDUCE
或其他非循环功能做到这一点?
我需要的结果是final.amount
列在结果CAPITAL
:
|initial.amount| buy.amount | sell.amount | profit | final.amount
|:-------------|------------:|:------------:|:-------|:--------
| 30000.00 | 5549.5 | 13866.64 | 8317.14| 38317.14
| 38317.14 | 3675.0 | 18745.00 |15070.00| 53387.14
| 53387.14 | 2630.0 | 2412.30 | 52.30| 53439.44
| 53439.44 | NA | NA | NA| NA
你想要计算像'f(a [5],f(a [4]中,f([3]中,f(A [2]中,f(A [1],0))))))'? – Spacedman
@Spacedman是的。有点像那样。计算的值,final.amount将用作第二个数据框中的initial.amount。然后从第二个数据帧计算出的final.amount将被用作第三个data.frame的initial.value。但除此之外,其他所有操作都是相同的。 –
'Reduce'函数将继承列表的顺序处理的中间结果。 SO中有许多工作的例子。 ('sapply','vapply','mapply'和'lapply'不支持这个程序。) –