lapply,sapply,并在简单的上下文中应用函数

时间:2017-11-28 12:03:57

标签: r

在R:

中运行此代码
pr <- function(x) {
  x
}

lapply(c("a" , "b") , pr)

sapply(c("a" , "b") , pr)

apply(c("a" , "b") , pr)

返回:

> pr <- function(x) {
+   x
+ }
> 
> lapply(c("a" , "b") , pr)
[[1]]
[1] "a"

[[2]]
[1] "b"

> 
> sapply(c("a" , "b") , pr)
  a   b 
"a" "b" 
> 
> apply(c("a" , "b") , pr)
Error in match.fun(FUN) : argument "FUN" is missing, with no default

以上是我对上述背景下lapplysapplyapply的回复值的理解:

lapply会返回一个列表,这是由[[1]]

表示的

sapply会返回一个向量,但为什么向量尺寸[1]未在响应中返回?

apply会返回错误,为什么会发生错误?

1 个答案:

答案 0 :(得分:3)

lapply/sapply遍历每个元素,即在这种情况下vectorc('a', 'b'))的每个元素。如果它是data.frame,则列将是循环的,matrix是具有维度的vector,因此,每个元素将循环并应用该函数。返回的输出为list lapplysapply,此处为vector,但它取决于参数simplify。默认情况下它是simplify = TRUE,因此如果输出元素的长度相同,则返回vector

使用apply,我们需要一个MARGIN参数。 MARGINdata.frame适用于matrix。假设,如果我们将vector转换为matrix,则使用MARGIN将其转换为

apply(t(c("a" , "b")) , 2, pr)

如果是单列矩阵,请使用MARGIN=1

apply(matrix(c('a', 'b')), 1, pr)

它可能会返回listvector等,具体取决于输出元素的长度。在这里,它只是返回值。所以,它是vector