gpt4 book ai didi

r - lapply 和 do.call 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 16:26:01 27 4
gpt4 key购买 nike

我最近正在学习 R,并对两个函数感到困惑:lapplydo.call。看起来它们只是类似于 Lisp 中的 map 函数。但为什么有两个函数的名称如此不同呢?为什么 R 不直接使用一个名为 map 的函数?

最佳答案

有一个名为Map的函数,可能类似于其他语言中的map:

  • lapply 返回一个与 X 长度相同的列表,其中每个元素都是对 X 的相应元素应用 FUN 的结果。

  • do.call 根据名称或函数以及要传递给它的参数列表构造并执行函数调用。

  • Map 将函数应用于给定向量的相应元素...Mapmaply 的简单包装器,它可以不尝试简化结果,类似于 Common Lisp 的 mapcar(但是参数被回收)。 future 版本可能允许对结果类型进行某种控制。

<小时/>
  1. Mapmapply 的包装器
  2. lapplymapply 的特例
  3. 因此,Maplapply 在许多情况下都是相似的。

例如,这里是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 将一个函数作为输入并将其其他参数传递给该函数。例如,它被广泛用于将列表组装成更简单的结构(通常与 rbindcbind 一起使用)。

例如:

x <- lapply(iris, class)
do.call(c, x)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
"numeric" "numeric" "numeric" "numeric" "factor"

关于r - lapply 和 do.call 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10801750/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com