others - r-使用call()进行分配

假设我这样操作函数体:


> f1 = function(a, b, d) {


+ stop("This is a template!")


+ result


+ }


> body(f1)[[2]] = call("<-", as.name("result"), lapply(letters[1:2], as.name))



看起来不错。


> f1


function (a, b, d) 


{


 result <- list(a, b)


 result


}



但是不能工作:


> f1(a = 123, b = 456, d = 999)


[[1]]


a



[[2]]


b



另一方面,当我执行此操作时:


> body(f1)[[2]] = call("<-", as.name("result"),


+ as.call(c(as.name("list"), lapply(letters[1:2], as.name))))



看起来是一样的。


> f1


function (a, b, d) 


{


 result <- list(a, b)


 result


}



,但是有效:


> f1(a = 123, b = 456, d = 999)


[[1]]


[1] 123



[[2]]


[1] 456



时间: 原作者:

问题是deparse不是完美的,当在不同的上下文中使用表达式时,存在相同的问题:


bquote(1 + .(lapply(letters[1:2], as.name)))



或者


bquote(sum(.(lapply(letters[1:2], as.name))))



R解析器不知道如何处理表达式中的名称列表,因为这种情况不会发生在真实R代码中。

原作者:
...