在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
以上是我对上述背景下lapply
,sapply
,apply
的回复值的理解:
lapply
会返回一个列表,这是由[[1]]
?
sapply
会返回一个向量,但为什么向量尺寸[1]
未在响应中返回?
apply
会返回错误,为什么会发生错误?
答案 0 :(得分:3)
lapply/sapply
遍历每个元素,即在这种情况下vector
(c('a', 'b')
)的每个元素。如果它是data.frame,则列将是循环的,matrix
是具有维度的vector
,因此,每个元素将循环并应用该函数。返回的输出为list
lapply
和sapply
,此处为vector
,但它取决于参数simplify
。默认情况下它是simplify = TRUE
,因此如果输出元素的长度相同,则返回vector
。
使用apply
,我们需要一个MARGIN
参数。 MARGIN
或data.frame
适用于matrix
。假设,如果我们将vector
转换为matrix
,则使用MARGIN
将其转换为
apply(t(c("a" , "b")) , 2, pr)
如果是单列矩阵,请使用MARGIN=1
apply(matrix(c('a', 'b')), 1, pr)
它可能会返回list
,vector
等,具体取决于输出元素的长度。在这里,它只是返回值。所以,它是vector