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 に答える