Car*_*lli 6 r function magrittr
以此对象为例:
expr <- substitute(mean(exp(sqrt(.)), .))
Run Code Online (Sandbox Code Playgroud)
它是一个嵌套列表.我想找到匹配的每个元素quote(.)
.
例如,magrittr
's解决方案仅匹配调用的第一级:
dots <- c(FALSE, vapply(expr[-1], identical, quote(.),
FUN.VALUE = logical(1)))
dots
[1] FALSE FALSE TRUE
Run Code Online (Sandbox Code Playgroud)
但我想找到每一个"." 在任意嵌套列表中.在这种特殊情况下,这将是这两个点:
expr[[3]]
expr[[2]][[2]][[2]]
Run Code Online (Sandbox Code Playgroud)
然后应该替换这些点:
expr[[3]] <- as.name("replacement")
expr[[2]][[2]][[2]] <- as.name("replacement")
expr
# mean(exp(sqrt(replacement)), replacement)
Run Code Online (Sandbox Code Playgroud)
你会怎么做?
使用递归函数:
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)
Run Code Online (Sandbox Code Playgroud)