我正在从高级 R中进行练习,即实施do.call
,我能够提出as.call
版本,但是当我尝试实施时call
,事情似乎有点混乱。
这是我的代码:
as.call
版本:
do.call2 <- function(what, args) {
eval(as.call(c(as.name(what),args)))
}
这似乎适用于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
是参数列表。我知道也许我需要从中解压缩参数args
,但不知道该怎么做。