0

有可能做类似的事情,

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") 就好了。

4

2 回答 2

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\"/>"
于 2013-09-24T22:07:11.623 回答
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表达式(它不会通过语言解释器甚至开始

于 2013-09-24T23:53:36.393 回答