R 简单上下文中的lapply、sapply和apply函数
在R中运行此代码:R 简单上下文中的lapply、sapply和apply函数,r,R,在R中运行此代码: pr <- function(x) { x } lapply(c("a" , "b") , pr) sapply(c("a" , "b") , pr) apply(c("a" , "b") , pr) pr >lappy(c(“a”、“b”),pr) [[1]] [1] “a” [[2]] [1] “b” > >萨普利(c(“a”、“b”)、pr) a b “a”“b” > >适用(c(“a”、“b”)、pr) match.fun(fun)中出错:缺少参
pr <- function(x) {
x
}
lapply(c("a" , "b") , pr)
sapply(c("a" , "b") , pr)
apply(c("a" , "b") , pr)
pr
>lappy(c(“a”、“b”),pr)
[[1]]
[1] “a”
[[2]]
[1] “b”
>
>萨普利(c(“a”、“b”)、pr)
a b
“a”“b”
>
>适用(c(“a”、“b”)、pr)
match.fun(fun)中出错:缺少参数“fun”,没有默认值
以下是我对上述上下文中lappy
、sapply
、apply
返回值的理解:
lappy
返回一个列表,这是否由[[1]]
表示
sapply
返回一个向量,但是为什么向量维度[1]
没有返回作为响应
apply
返回一个错误,为什么会发生这种情况?lapply/sapply
循环通过每个元素,即在这种情况下,向量的每个元素(c('a','b')
)。如果它是data.frame,则列将是循环的,矩阵
是带维度的向量
,因此,每个元素将循环并应用函数。返回的输出是lappy
和sapply
的列表,这里是向量
,但它取决于参数simplify
。默认情况下,它是simplify=TRUE
,因此如果输出元素的长度相同,它将返回一个向量
使用apply
,我们需要一个MARGIN
参数。边距
用于数据框
或矩阵
。假设,如果我们将向量
转换为矩阵
,那么使用边距
就可以了
apply(t(c("a" , "b")) , 2, pr)
如果是单列矩阵,则使用MARGIN=1
apply(matrix(c('a', 'b')), 1, pr)
它可以根据输出元素的长度返回列表
、向量
等。在这里,它只是返回值。因此,它是一个向量
,lapply/sapply
循环通过每个元素,即在这种情况下,向量的每个元素
(c('a','b')
)。如果它是data.frame,则列将是循环的,矩阵
是带维度的向量
,因此,每个元素将循环并应用函数。返回的输出是lappy
和sapply
的列表,这里是向量
,但它取决于参数simplify
。默认情况下,它是simplify=TRUE
,因此如果输出元素的长度相同,它将返回一个向量
使用apply
,我们需要一个MARGIN
参数。边距
用于数据框
或矩阵
。假设,如果我们将向量
转换为矩阵
,那么使用边距
就可以了
apply(t(c("a" , "b")) , 2, pr)
如果是单列矩阵,则使用MARGIN=1
apply(matrix(c('a', 'b')), 1, pr)
它可以根据输出元素的长度返回列表
、向量
等。在这里,它只是返回值。因此,它是一个向量
,apply
需要一个MARGIN
参数。在这种情况下,它是2。顺便说一句,它在这里甚至不起作用,因为它是用于data.frame
或matrix
的,即apply(t(c(“a”,“b”)),2,pr)
我强烈建议阅读Hadley Wickham的“Advanced R”(函数章节):。另外,请看一下R中函数的标准文档(以及示例):-)我可以建议您阅读这些函数的文档吗?我删除了对Rstudio的任何提及,因为这个问题与IDE无关。这仅仅是一个关于R的问题。(R和Rstudio是独立的软件)。apply
需要一个MARGIN
参数。在这种情况下,它是2。顺便说一句,它在这里甚至不起作用,因为它是用于data.frame
或matrix
的,即apply(t(c(“a”,“b”)),2,pr)
我强烈建议阅读Hadley Wickham的“Advanced R”(函数章节):。另外,请看一下R中函数的标准文档(以及示例):-)我可以建议您阅读这些函数的文档吗?我删除了对Rstudio的任何提及,因为这个问题与IDE无关。这仅仅是一个关于R的问题。(R和Rstudio是独立的软件)。sapply返回一个向量,但为什么向量维度[1]没有返回作为回应,这是Rstudio的一些怪癖吗?@blue sky如前所述,sapply
的默认值是simplify=TRUE
谢谢,但会考虑使用sapply(c(“a”,“b”),pr,simplify=FALSE)应返回[1]“a”和“b”。[[1]]的意义是什么?@blue sky正如您所指出的,它返回一个列表
,因为您不想将其简化为向量。[[1]]
的意义在于,它将第一个列表元素子集为“a”@blue sky阅读上的文档?[
它包含非常有用的信息,有助于澄清列表和向量之间的差异。也可能。sapply返回向量,但为什么向量维度是[1]没有返回响应,这是rstudio的一些怪癖吗?@blue sky如前所述,sapply
的默认值是simplify=TRUE
谢谢,但会认为使用sapply(c(“a”,“b”),pr,simplify=FALSE)应该返回[1]“a”“b”。[[1]的意义是什么?正如您所指出的,@blue sky正在返回一个列表
,因为您不想将其简化为一个向量。[[1]]
的意义在于,它将第一个列表元素子集,以给出“a”@blue sky阅读上的文档?[
它包含了非常有用的信息,有助于澄清列表和向量之间的差异。也许还有。