我正在执行advanced R的练习,即实施do.call
,我能够提出as.call
版本,但是当我尝试用{{1}实现时事情似乎有点困惑。
这是我的代码:
call
版本:
as.call
似乎与do.call2 <- function(what, args) {
eval(as.call(c(as.name(what),args)))
}
doc:
do.call
但是当我尝试使用tmp <- expand.grid(letters[1:2], 1:3, c("+", "-"))
do.call2("paste", c(tmp, sep = ""))
[1] "a1+" "b1+" "a2+" "b2+" "a3+" "b3+" "a1-" "b1-" "a2-" "b2-" "a3-" "b3-"
时,我无法解决问题:
call
此处do.call3 <- function(what,args) {
cc <- call(what,args)
eval(cc)
}
do.call3("paste", c(tmp, sep = ""))
[1] "c(1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2)" "c(1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3)"
[3] "c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2)" ""
是参数列表。我知道也许我需要从args
解包参数,但不知道该怎么做。