将函数应用于数据框中的列并在函数参数中进行顺序更改的最佳方法是什么?

What is the best way to apply a function to a column in a data frame with sequential changes in the function argument?

我在 R 中使用 quantmod 来获取 'QQQ' ETF 的价格历史记录。我想计算 1:n 期间的变化率。

我可以使用 ROC() 来完成,并且可以成功创建和命名 xts 的列。我只是认为它是时间密集型的——我知道有更好的方法来做到这一点。

library(quantmod)
getSymbols("QQQ")

QQQ <- QQQ$QQQ.Close
View(QQQ)
QQQ <- `colnames<-`(QQQ,"close")

QQQ$ROC1 <- ROC(x = QQQ[,1],n = 1)
QQQ$ROC2 <- ROC(x = QQQ[,1], n = 2)
QQQ$ROC3 <- ROC(x = QQQ[,1], n = 3)

我预计我将有 'n' 列 1:n 以及相应的 ROC 计算。我知道每列会有 'n' 个 N/A 个值。

您可以使用 parallel 包中的 mclapply() 来使用多线程来加速任务:

library(parallel)
library(quantmod)

getSymbols("QQQ")

QQQ <- QQQ$QQQ.Close
View(QQQ)
QQQ <- `colnames<-`(QQQ,"close")

mclapply(seq_along(QQQ), function(i) ROC(x = QQQ[, 1], n = i), mc.cores = detectCores())

n = 3
head(cbind(QQQ, setNames(do.call(cbind, lapply(1:n, function(i)
    ROC(x = QQQ[,1], n = i))),
    paste0("ROC", 1:n))))
#           close         ROC1         ROC2        ROC3
#2007-01-03 43.24           NA           NA          NA
#2007-01-04 44.06  0.018786325           NA          NA
#2007-01-05 43.85 -0.004777691  0.014008634          NA
#2007-01-08 43.88  0.000683985 -0.004093706 0.014692619
#2007-01-09 44.10  0.005001079  0.005685064 0.000907373
#2007-01-10 44.62  0.011722429  0.016723508 0.017407493