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代碼中。

原作者:
...