可以做类似的事情,
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”)会很好。
答案 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
表达式(它甚至不会超过语言解释器甚至启动