Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 解析字符串以代替表达式参数_R_Metaprogramming - Fatal编程技术网

R 解析字符串以代替表达式参数

R 解析字符串以代替表达式参数,r,metaprogramming,R,Metaprogramming,我想将表达式作为参数发送到函数列表。在rlist包中选择 正常使用功能列表。选择如下: x <- list(p1 = list(type='A',score=list(c1=10,c2=8)), p2 = list(type='B',score=list(c1=9,c2=9)), p3 = list(type='B',score=list(c1=9,c2=7))) list.select(x, type) 但这不起作用。以下是两个函数调用的结果: > list.select(x,

我想将表达式作为参数发送到函数
列表。在rlist包中选择

正常使用功能
列表。选择
如下:

x <- list(p1 = list(type='A',score=list(c1=10,c2=8)), p2 = list(type='B',score=list(c1=9,c2=9)), p3 = list(type='B',score=list(c1=9,c2=7)))
list.select(x, type)
但这不起作用。以下是两个函数调用的结果:

> list.select(x, type)
$p1
$p1$type
[1] "A"
$p2
$p2$type
[1] "B"
$p3
$p3$type
[1] "B"
> list.select(x, parse(text='type'))
$p1
$p1[[1]]
expression(type)
$p2
$p2[[1]]
expression(type)
$p3
$p3[[1]]
expression(type)

如何使用字符串代替表达式?

列表。select执行非标准求值,因此需要为其构造调用。以下是一个例子:

tag.name <- "type"
eval(call("list.select", x, as.name(tag.name)))
我所做的与您所做的不同之处在于,我构造整个调用是为了避免给出
列表。选择
有可能错误地解释其参数。您的版本首先计算
列表。选择
,从那时起,您就可以决定
列表要如何解释其参数

tag.name <- "type"
eval(call("list.select", x, as.name(tag.name)))
$p1
$p1$type
[1] "A"


$p2
$p2$type
[1] "B"


$p3
$p3$type
[1] "B"