我想使用substitute()
函数在表达式中进行变量替换,同时不执行这些表达式。比如,我有以下内容:
expr1 <- expression(if(x){
return(y)
} else {
return(z)
})
我希望能将以下结果赋值给“expr1”:
expression(if(cos(x)){
return(y)
} else {
return(z)
})
通过像这样做:
expr2 <- substitute(expr1, list(x=cos(x)))
但这并不起作用,因为替代品没有评估它的第一个参数。因此,我只会得到原始变量:
expr1
现在这里说,如果我想在分配给变量的表达式中进行替换,我需要执行两次
substitute()
,然后是eval()
,就像这样:expr2 <- eval(substitute(substitute(e, list(x = cos(x))), list(e = expr1)))
执行这条语句后,“expr2”确实被赋值了一个表达式,但它并不包含所需的替换内容。
expression(if (x) {
return(y)
} else {
return(z)
})
我想知道如何对“expr1”应用语法,以便我得到我想要赋给“expr2”的结果,即:
expression(if (cos(x)) {
return(y)
} else {
return(z)
})
do.call()
周围使用as.expression()
。我已经更新了我的答案。 - MrFlickas.expression()
的注释。 - small_data88