我有一個列表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'不支持這個程序。) –