0

我正在构建一个R函数,该函数要求 a 的大小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))).

有没有更好的办法?

4

1 回答 1

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, ])
于 2013-10-28T04:46:09.457 回答