6

例として、次のオブジェクトを取り上げます。

expr <- substitute(mean(exp(sqrt(.)), .))

ネストされたリストです。に一致するすべての要素を見つけたいですquote(.)

たとえば、magrittrのソリューションは、呼び出しの最初のレベルのみに一致します。

dots <- c(FALSE, vapply(expr[-1], identical, quote(.), 
                        FUN.VALUE = logical(1)))
dots
[1] FALSE FALSE  TRUE

しかし、私はすべての「。」を見つけたかったのです。任意のネストされたリストで。この特定のケースでは、これは次の 2 つのドットになります。

expr[[3]]
expr[[2]][[2]][[2]]

そして、これらのドットを置き換える必要があります:

expr[[3]] <- as.name("replacement")
expr[[2]][[2]][[2]] <- as.name("replacement")
expr
# mean(exp(sqrt(replacement)), replacement)

これをどのように行いますか?

4

1 に答える 1

7

再帰関数の使用:

convert.call <- function(x, replacement) {
  if (is.call(x)) as.call(lapply(x, convert.call, replacement=replacement)) else
    if (identical(x, quote(.))) as.name(replacement) else
      x
}

convert.call(expr, "x")
# mean(exp(sqrt(x)), x)
于 2014-10-02T04:21:11.220 に答える