Answers:
有一个叫做的函数Map,可能与其他语言的map类似:
lapply 返回一个与X长度相同的列表,其中每个元素都是将FUN应用于X的相应元素的结果。
do.call 根据名称或函数以及要传递给它的参数列表构造并执行函数调用。
Map将函数应用于给定向量的相应元素... Map是一个简单的包装程序mapply,不尝试简化结果,类似于Common Lisp的mapcar(但是,参数被回收)。将来的版本可能允许对结果类型进行某种控制。
Map 是一个包装 mapplylapply 是一种特殊情况 mapplyMap,lapply在许多情况下将与相似。例如,这里是lapply:
lapply(iris, class)
$Sepal.Length
[1] "numeric"
$Sepal.Width
[1] "numeric"
$Petal.Length
[1] "numeric"
$Petal.Width
[1] "numeric"
$Species
[1] "factor"
和使用相同Map:
Map(class, iris)
$Sepal.Length
[1] "numeric"
$Sepal.Width
[1] "numeric"
$Petal.Length
[1] "numeric"
$Petal.Width
[1] "numeric"
$Species
[1] "factor"
do.call将一个函数作为输入并将其其他参数溅到该函数上。例如,它广泛用于将列表组装成更简单的结构(通常使用rbind或cbind)。
例如:
x <- lapply(iris, class)
do.call(c, x)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
   "numeric"    "numeric"    "numeric"    "numeric"     "factor" 
              do.call(cbind, x)当前版本的最后一个例子给了我Error in do.call(c, x) : 'what' must be a function or character string吗?
                    cbind()与函数有所不同c(),尽管它也可以工作,但结果却不同。
                    lapply在列表上应用函数,使用参数列表do.call调用函数。对我来说,这似乎有很大的不同...
举一个带有列表的例子:
X <- list(1:3,4:6,7:9)
使用lapply,您可以得到列表中每个元素的平均值,如下所示:
> lapply(X,mean)
[[1]]
[1] 2
[[2]]
[1] 5
[[3]]
[1] 8
do.call 给出错误,因为平均值期望参数“ trim”为1。 
另一方面,rbind将所有参数按行绑定。因此,按行绑定X,您可以执行以下操作:
> do.call(rbind,X)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
如果您使用lapply,则R将应用于rbind列表的每个元素,这给您带来了废话:
> lapply(X,rbind)
[[1]]
     [,1] [,2] [,3]
[1,]    1    2    3
[[2]]
     [,1] [,2] [,3]
[1,]    4    5    6
[[3]]
     [,1] [,2] [,3]
[1,]    7    8    9
要拥有类似Map之类的东西,您需要?mapply,这是完全不同的。要获取例如X中每个元素的均值,但修整不同,可以使用:
> mapply(mean,X,trim=c(0,0.5,0.1))
[1] 2 5 8
              
do.call几乎一样apply在Lisp中