0

のサイズが別の変数のサイズに応じて変化 する必要がある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)))ました。

より良い方法はありますか?

4

1 に答える 1

2

直接呼び出すだけです。

out <- c(1, sapply(1:3, function(i) Xts_filled[locNAs[n] - i, ]))

が 1 の場合Xts_filled[locNAs[n], ]、これは次のように単純化されます。

out <- sapply(0:3, function(i) Xts_filled[locNAs[n] - i, ])
于 2013-10-28T04:46:09.457 に答える