Package base version 4.2.0
Description
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() 调用。
Usage
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))
Arguments
参数【X】:向量(原子或列表)或表达式对象。其他对象(包括分类对象)将被 base::as.list 强制转换为列表。
参数【FUN】:要应用于参数【X】的每个元素的函数:参见 “Details”。对于像 +、%*% 这样的函数,函数名必须加上反引号或引号。
参数【...】:参数【FUN】的可选参数。
参数【simplify】:逻辑字符串或字符串;如果可能的话,结果应该简化为向量、矩阵或高维数组吗?因此,它必须使用全名而不是缩写。默认值 TRUE 在适当的情况下返回一个向量或矩阵,而如果 simplify = "array" 则结果可能是一个" rank " 的数组 ( = length(dim(.)))比 FUN(X[[i]]) 的结果高一个。
参数【USE.NAMES】:逻辑值;如果为 TRUE 且参数【X】是字符,则使用参数【X】作为结果的名称,除非它已经有名称。既然这个论点是参数【...】,那么它的名字不能缩写。
参数【FUN.VALUE】:广义向量;参数【FUN】返回值的模板。参见 “Details”。
参数【n】:整数值:重复的次数。
参数【expr】:重复求值的表达式(一种语言对象,通常是调用)。
参数【x】:一个列表,通常由 lapply() 返回。
参数【higher】:逻辑值;如果为 TRUE, simplify2array() 将在适当的时候生成一个(“更高的等级”)数组,而 higher = FALSE 将只返回一个矩阵(或向量)。这两种情况分别对应于 sapply(*, simplify = "array") 或 参数【simplify】 = TRUE。
参数【except】:逻辑值;如果为 TRUE, simplify2array() 将在适当的时候生成一个(“更高的等级”)数组,而 higher = FALSE 将只返回一个矩阵(或向量)。这两种情况分别对应于 sapply(*, simplify = "array") 或 参数【simplify】 = TRUE。
Details
参数【FUN】是通过调用 match.fun 找到的。通常被指定为一个函数或一个符号(例如,一个反引号的名称),或者一个字符串,指定要从调用 lapply 的环境中搜索的函数。
函数 FUN 必须能够接受参数【X】的任何元素作为输入。如果后者是原子向量,则参数【FUN】将始终被传递一个与参数【X】相同类型的长度为 1 的向量。
传递给参数【...】的参数不能与其他参数名称冲突,并且可能需要小心避免与参数【FUN】有部分重叠。通常情况下,最好将前两个参数命名为 X 和 FUN,如果参数【...】正常运行了:既避免了与参数【FUN】部分重叠,又确保传递名为 X 或 FUN 的参数时给出一个合理的错误信息。
只有当参数【X】的长度大于零并且参数【X】的所有元素的返回值都是相同的(正)长度时,才会尝试简化 sapply。如果公共长度为 1,则结果是一个向量,如果大于 1,则是一个矩阵,其中一列对应于参数【X】的每个元素。
简化总是在 vapply 中完成。这个函数检查参数【...】的所有值是否与函数 FUN 兼容。因为它们必须具有相同的长度和类型。
S4 类的用户应该传递一个列表给 lapply 和 vapply:内部强制转换由 as.list 完成,而不是由用户定义的(例如,通过在基函数上设置 S4 方法)。
Value
对于 lapply,sapply(simplify = FALSE) 和 replicate(simplify = FALSE),返回一个列表。
对于 sapply(simplify = TRUE) 和 replicate(simplify = TRUE):如果参数【X】的长度为 0 或参数【n】 = 0,则为空列表。否则是与参数【X】长度相同的原子向量、矩阵或列表(对于复制,长度为参数【n】)。如果进行了简化,则在将对列表强制转换为列表之后,根据层次结构中返回值的最高类型确定输出类型 NULL < raw < logical < integer < double < complex < character < list < expression。
vapply 返回一个与参数【FUN.VALUE】类型匹配的向量或数组。如果 length(FUN.VALUE) == 1,则返回与参数【X】长度相同的向量,否则返回数组。如果参数【FUN.VALUE】不是数组,结果是具有长度 (FUN.VALUE) 行和长度 (X) 列的矩阵,否则是 dim(a) == c(dim(FUN.VALUE),长度 (X) )的数组 a。
数组值的(Dim)名称取自参数【FUN】。如果命名,则取参数【FUN.VALUE】,否则从第一次函数调用的结果开始。矩阵的列名或更一般的数组值的最后一个维度的名称或向量值的名称从参数【X】设置,如 sapply 中所示。
Value
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。