R - 将表达式计算为字符串

时间:2013-09-24 22:01:05

标签: r parsing

可以做类似的事情,

x = function(n,v) paste("<rel name=\"",quote(n),"\" value=\"",quote(v),"\"/>",sep="")

以便x(y,1)生成,

"<rel name=\"y\" value=\"1\"/>"

当然这不起作用而是产生,

"<rel name=\"n\" value=\"v\"/>"

我也有一种唠叨的感觉,这种操作有技术名称,有人知道它是什么吗?

基本上,如果我没有做x(“y”,“1”)会很好。

2 个答案:

答案 0 :(得分:1)

您正在寻找substitute

x = function(n,v) paste("<rel name=\"",substitute(n),"\" value=\"",
                        substitute(v),"\"/>",sep="")

x(y,1)
#[1] "<rel name=\"y\" value=\"1\"/>"

或者,如果您要使用更复杂的表达式,deparse(substitute(

x = function(n,v) paste("<rel name=\"",deparse(substitute(n)),"\" value=\"",
                        deparse(substitute(v)),"\"/>",sep="")

x(y + 2, 3)
#[1] "<rel name=\"y + 2\" value=\"3\"/>"

答案 1 :(得分:1)

您可以使用deparse(substitute()match.call。请注意我使用了sprintf,因为在这些情况下我发现解密比paste更容易。

 xx <- function(n,v){
       x <- sapply(as.list(match.call())[-1],deparse)
        sprintf(fmt ='<rel name=\"%s\" value=\"%s\">',x['n'],x['v'])}
 xx(y,2)
 ## [1] "<rel name=\"y\" value=\"2\">"
 xx(y, fun(x,b,v))
 ## [1] "<rel name=\"y\" value=\"fun(x, b, v)\">"

请注意x(y,fun(p;d))不会解析,因为它不是有效的R表达式(它甚至不会超过语言解释器甚至启动