构建可变长度的表达式(R中的宏?)

时间:2013-10-28 03:47:48

标签: r macros

我正在构建一个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)))投入工作。

有更好的方法吗?

1 个答案:

答案 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, ])