1

我正在从高级 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,但不知道该怎么做。

4

0 回答 0