lapply
位于 base
包(package)。 说明
lapply
返回与 X
长度相同的列表,其中每个元素是将 FUN
应用于 X
的相应元素的结果。
sapply
是 lapply
的用户友好版本和包装器,默认情况下通过应用 simplify2array()
返回向量、矩阵,或者如果 simplify = "array"
则返回数组(如果适用)。 sapply(x, f, simplify = FALSE, USE.NAMES = FALSE)
与 lapply(x, f)
相同。
vapply
与 sapply
类似,但具有预先指定的返回值类型,因此使用起来更安全(有时更快)。
replicate
是 sapply
的常用包装器,用于重复计算表达式(通常涉及随机数生成)。
simplify2array()
是当 simplify
不为 false 时从 sapply()
调用的实用程序,并且类似地从 mapply()
调用。
用法
lapply(X, FUN, ...)
sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
vapply(X, FUN, FUN.VALUE, ..., USE.NAMES = TRUE)
replicate(n, expr, simplify = "array")
simplify2array(x, higher = TRUE, except = c(0L, 1L))
参数
X |
向量(原子或列表)或 |
FUN |
应用于 |
... |
|
simplify |
逻辑或字符串;如果可能的话,结果应该简化为向量、矩阵还是更高维的数组?对于 |
USE.NAMES |
逻辑性;如果 |
FUN.VALUE |
(广义)向量; FUN 返回值的模板。查看具体信息'。 |
n |
整数:重复次数。 |
expr |
要重复计算的表达式(language object,通常是调用)。 |
x |
一个列表,通常从 |
higher |
逻辑性;如果为 true, |
except |
整数向量或 |
细节
FUN
通过调用 match.fun
找到,通常指定为函数或符号(例如,反引号名称)或字符串,指定要从调用 lapply
的环境中搜索的函数。
函数 FUN
必须能够接受 X
的任何元素作为输入。如果后者是原子向量,则 FUN
将始终传递与 X
类型相同的长度为 1 的向量。
...
中的参数不能与任何其他参数同名,并且可能需要注意避免与 FUN
部分匹配。在通用代码中,如果传递 ...
,最好将前两个参数命名为 X
和 FUN
:这既可以避免与 FUN
部分匹配,又可以确保在参数存在时给出合理的错误消息名为 X
或 FUN
的传递通过 ...
。
仅当 X
的长度大于零并且 X
的所有元素的返回值都具有相同(正)长度时,才会尝试 sapply
中的简化。如果公共长度为 1,则结果是一个向量,如果大于 1,则结果是一个矩阵,其中的列对应于 X
的每个元素。
简化始终在 vapply
中完成。此函数检查 FUN
的所有值是否与 FUN.VALUE
兼容,因为它们必须具有相同的长度和类型。 (类型可以在逻辑 < 整数 < 双精度 < 复杂排序中提升为更高类型,但不能降级。)
S4 类的用户应将列表传递给 lapply
和 vapply
:内部强制由基本命名空间中的 as.list
完成,而不是由用户定义的(例如,通过在基本函数上设置 S4 方法) 。
值
对于 lapply
、 sapply(simplify = FALSE)
和 replicate(simplify = FALSE)
,一个列表。
对于 sapply(simplify = TRUE)
和 replicate(simplify =
TRUE)
:如果 X
的长度为零或 n = 0
,则为空列表。否则为与 X
长度相同的原子向量或矩阵或列表(对于 replicate
,长度为 n
)。如果发生简化,则在将pairlists强制为列表之后,输出类型由层次结构中返回值的最高类型确定:NULL < raw <逻辑<整数< double
vapply
返回与 FUN.VALUE
匹配的类型的向量或数组。如果length(FUN.VALUE) == 1
返回与X
长度相同的向量,否则返回数组。如果 FUN.VALUE
不是 array
,则结果是具有 length(FUN.VALUE)
行和 length(X)
列的矩阵,否则是具有 dim(a) == c(dim(FUN.VALUE), length(X))
的数组 a
。
如果已命名,则数组值的 (Dim) 名称取自 FUN.VALUE
,否则取自第一个函数调用的结果。矩阵的列名称或更一般地数组值的最后一维的名称或向量值的名称从 X
设置,如 sapply
中。
注意
sapply(*, simplify = FALSE, USE.NAMES = FALSE)
等价于 lapply(*)
。
由于历史原因, lapply
创建的调用未被评估,并且已经编写了依赖于此的代码(例如, bquote
)。这意味着录制的调用始终采用 FUN(X[[i]], ...)
形式,其中 i
替换为当前(整数或双精度)索引。这通常不是问题,但如果 FUN
使用 sys.call
或 match.call
或者它是使用该调用的原始函数,则可能会出现问题。这意味着使用包装器调用原始函数通常更安全,因此例如需要 lapply(ll, function(x)
is.numeric(x))
来确保 is.numeric
的方法分派正确发生。
如果 expr
是函数调用,请注意有关其求值位置的假设,特别是 ...
可能引用的内容。您可以将附加命名参数传递给函数调用,作为 replicate
的附加命名参数:请参阅“示例”。
例子
require(stats); require(graphics)
x <- list(a = 1:10, beta = exp(-3:3), logic = c(TRUE,FALSE,FALSE,TRUE))
# compute the list mean for each list element
lapply(x, mean)
# median and quartiles for each list element
lapply(x, quantile, probs = 1:3/4)
sapply(x, quantile)
i39 <- sapply(3:9, seq) # list of vectors
sapply(i39, fivenum)
vapply(i39, fivenum,
c(Min. = 0, "1st Qu." = 0, Median = 0, "3rd Qu." = 0, Max. = 0))
## sapply(*, "array") -- artificial example
(v <- structure(10*(5:8), names = LETTERS[1:4]))
f2 <- function(x, y) outer(rep(x, length.out = 3), y)
(a2 <- sapply(v, f2, y = 2*(1:5), simplify = "array"))
a.2 <- vapply(v, f2, outer(1:3, 1:5), y = 2*(1:5))
stopifnot(dim(a2) == c(3,5,4), all.equal(a2, a.2),
identical(dimnames(a2), list(NULL,NULL,LETTERS[1:4])))
hist(replicate(100, mean(rexp(10))))
## use of replicate() with parameters:
foo <- function(x = 1, y = 2) c(x, y)
# does not work: bar <- function(n, ...) replicate(n, foo(...))
bar <- function(n, x) replicate(n, foo(x = x))
bar(5, x = 3)
参考
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
也可以看看
apply
、 tapply
、 mapply
用于将函数应用于多个参数,rapply
用于 lapply()
的递归版本、eapply
用于将函数应用于 environment
中的每个条目。
相关用法
- R labels 从对象中查找标签
- R list2DF 从列表创建 DataFrame
- R levels 级别属性
- R ls 列出对象
- R lengths 列表或向量元素的长度
- R libPaths 包的搜索路径
- R load 重新加载保存的数据集
- R lower.tri 矩阵的下三角部分和上三角部分
- R log 对数和指数
- R locales 查询或设置区域设置的各个方面
- R l10n_info 本地化信息
- R length 物体的长度
- R license R 许可条款
- R list.files 列出目录/文件夹中的文件
- R list 列表 – 通用和点对
- R library 加载/附加和列出包
- R logical 逻辑向量
- R list2env 从列表中构建或添加到环境
- R library.dynam 从包中加载 DLL
- R libcurlVersion libcurl 的报告版本
- R file.path 构造文件路径
- R grep 模式匹配和替换
- R getwd 获取或设置工作目录
- R vector 向量 - 创建、强制等
- R dump R 对象的文本表示
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Apply a Function over a List or Vector。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。