基本上,我想创建一个R函数separate_call
,它获取类似x[ind]
的参数并返回x
和ind
(因此,来自父环境):
x <- 1:10
ind <- 2:3
separate_call(x[ind]) ## should return `list(1:10, 2:3)`
我知道我需要使用非标准评估和一些树解析,但我对这两个概念不够熟悉。任何帮助将不胜感激。
答案 0 :(得分:1)
我正在添加此解决方案,不是很优雅,看看这是否符合您的需求。
separate_call <- function(m){
dprse <- deparse(substitute(m)) ##deparsing the data: to make it as string
lyst <- strsplit(dprse,"\\[|\\]")[[1]] ##removing the square brackets to sparate contents of m
lapply(lyst, function(y)eval(parse(text = y), envir = parent.frame()))
}
我希望这有效,我通过三种不同方式调用它来尝试它
separate_call(1:10[ind])
separate_call(x[2:3])
separate_call(1:10[2:3])
他们都给了我同样的回应
> separate_call(1:10[ind])
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10
[[2]]
[1] 2 3
> separate_call(x[2:3])
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10
[[2]]
[1] 2 3
> separate_call(1:10[2:3])
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10
[[2]]
[1] 2 3