我只想创建一个简单的函数,将每日返回列添加到股票价格数据框中。
作为手动剥离,它看起来像这样:
AAL <- mutate(AAL, logreturn = Delt(AAL$Price, type = "log"))
rownames(AAL) <- AAL[, 1]
AAL <- AAL[, 2:4]
AAL[1, 3] <- 0
它以这种方式工作。但是,我想通过简单地输入
来创建一个完成上述功能的功能head(AAL)
Date Price Volume
1 2013-06-28 7.5839 31308
2 2013-07-01 7.2093 1054
3 2013-07-02 7.3098 109
4 2013-07-03 7.0539 1275
5 2013-07-04 7.0448 22
6 2013-07-05 7.0357 110
add_returns(AAL)
head(AAL)
Price Volume Delt.1.log
2013-06-28 7.5839 31308 0.000000000
2013-07-01 7.2093 1054 -0.050655720
2013-07-02 7.3098 109 0.013844054
2013-07-03 7.0539 1275 -0.035635258
2013-07-04 7.0448 22 -0.001290899
2013-07-05 7.0357 110 -0.001292568
我尝试这样做,但它不起作用:
add_return <- function(symbol){
symbol <- mutate(eval(parse(text = paste0(symbol, collapse = "")),
logreturn =
Delt(eval(parse(text = paste0(symbol, "$Price", collapse = ""))),
type = "log"))
rownames(symbol) <- eval(parse(text = paste0(symbol, "$Date", collapse = "")))
symbol <- eval(parse(text = paste0(symbol, "[2:4]", collapse = "")))
eval(parse(text = paste0(symbol, "[1, 3]", collapse = ""))) <- 0
}
答案 0 :(得分:1)
如果你只想以编程方式传递数据集的名称,你可以很容易地做到这一点,例如像这样(几乎与你的&#34;手册&#34; skript完全一样) ):
add_return <- function(data) {
data <- transform(data, logreturn = Delt(Price, type = "log"))
rownames(data) <- data[, 1]
data <- data[, 2:4]
data[1, 3] <- 0
return(data)
}
然后,您可以使用以下方法调用您的函数:
add_return(AAL)
# Price Volume Delt.1.log
#2013-06-28 7.5839 31308 0.000000000
#2013-07-01 7.2093 1054 -0.050655720
#2013-07-02 7.3098 109 0.013844054
#2013-07-03 7.0539 1275 -0.035635258
#2013-07-04 7.0448 22 -0.001290899
#2013-07-05 7.0357 110 -0.001292568
话虽如此,如果你希望你的函数能够以编程方式允许其他输入,例如要处理的列名或新列的名称等,那将是一个不同的故事。(在这种情况下,你&#39; d可能想看看dplyr的non-standard evaluation vignette。)但是根据你的问题判断并试图制定这个功能,这不是你想要做的。
如果要永久更改全局环境中的数据,执行此操作的标准R方式将是:
AAL <- add_return(AAL)
通常不建议从功能内部到全局环境的分配,所以我会坚持这种标准方式,在这种情况下看起来很容易。