我正在构建一个R
函数,该函数要求expression
的大小根据另一个变量的大小而变化。
表达式元素的顺序如下:
1/ 1
2/ "Xts_filled[(locNAs[n] - 1),]"
3/ "Xts_filled[(locNAs[n] - 2),]"
4/ "Xts_filled[(locNAs[n] - 3),]"
...
表达式有一个规则的模式,只有在添加每个元素后减去更改后的数字:它似乎是某种macro
的完美候选者。
这可能在R
吗?
我使用for
循环和eval(parse(text = ___))
惯用法对其进行了攻击,如下所示:
buildExpr <- function(ARorder){
callList <- list("1", "Xts_filled[(locNAs[n] - 1),]")
if(ARorder - 1) {
for(j in 2:ARorder) {
callList <- c(callList, paste0("Xts_filled[(locNAs[n] -", j, "),]"))
}
}
callExpr <- paste0("c(", paste(callList, collapse = ","), ")")
}
我通过eval(parse(text = buildExpr(3)))
投入工作。
有更好的方法吗?
答案 0 :(得分:2)
直接调用它。
out <- c(1, sapply(1:3, function(i) Xts_filled[locNAs[n] - i, ]))
如果Xts_filled[locNAs[n], ]
为1,则会简化为
out <- sapply(0:3, function(i) Xts_filled[locNAs[n] - i, ])