R 为什么sapply()在字符上使用时返回带有属性的列表?

R 为什么sapply()在字符上使用时返回带有属性的列表?,r,sapply,R,Sapply,在字符向量上使用时,sapply()有一种奇怪的行为: y <- c("Hello", "bob", "daN") z <- sapply(y, function(x) {toupper(x)}) z # Hello bob daN # "HELLO" "BOB" "DAN" str(z) # Named chr [1:3] "HELLO" "BOB" "DAN" # - attr(*, "names")= chr [1:3] "Hello" "bob"

在字符向量上使用时,
sapply()
有一种奇怪的行为:

y <- c("Hello", "bob", "daN")
z <- sapply(y, function(x) {toupper(x)})
z
# Hello     bob     daN 
# "HELLO"   "BOB"   "DAN" 
str(z)
# Named chr [1:3] "HELLO" "BOB" "DAN"
# - attr(*, "names")= chr [1:3] "Hello" "bob" "daN"
默认情况下,
sapply()
为字符向量上的每次迭代添加名称。 通过在调用中使用
USE.names=FALSE
,可以在没有名称的情况下传递结果

sapply(y, toupper, USE.NAMES = FALSE)
# [1] "HELLO" "BOB"   "DAN" 
这在
帮助(sapply)

使用.名称-逻辑;如果为TRUE且X为字符,则使用X作为结果的名称,除非它已经有名称。既然这个论点如下。。。它的名字不能缩写

注意仅应用单个函数时,不需要使用匿名函数(匿名函数的使用效率也稍低)。上面也显示了这一点

还请注意这里不需要
sapply()
,因为
toupper()
是矢量化的

toupper(y)
# [1] "HELLO" "BOB"   "DAN"  
默认情况下,
sapply()
为字符向量上的每次迭代添加名称。 通过在调用中使用
USE.names=FALSE
,可以在没有名称的情况下传递结果

sapply(y, toupper, USE.NAMES = FALSE)
# [1] "HELLO" "BOB"   "DAN" 
这在
帮助(sapply)

使用.名称-逻辑;如果为TRUE且X为字符,则使用X作为结果的名称,除非它已经有名称。既然这个论点如下。。。它的名字不能缩写

注意仅应用单个函数时,不需要使用匿名函数(匿名函数的使用效率也稍低)。上面也显示了这一点

还请注意这里不需要
sapply()
,因为
toupper()
是矢量化的

toupper(y)
# [1] "HELLO" "BOB"   "DAN"  

我正在阅读这份文档,但我不理解。现在我知道了。你能详细解释一下“匿名函数”是什么意思吗?当然。当您编写
function(x){toupper(x)}
时,您使用的是一个“匿名函数”,因为该函数没有指定名称。您可以像这样在控制台中编写它(函数(x)toupper(x))(y),并在不为函数指定名称的情况下获得结果。太棒了!我已经找了好几天了。起初,我以为我得到了重复的行,但结果发现这些是名称,这些名称是从源行的值派生的。我正在阅读此文档,但我不理解它。现在我知道了。你能详细解释一下“匿名函数”是什么意思吗?当然。当您编写
function(x){toupper(x)}
时,您使用的是一个“匿名函数”,因为该函数没有指定名称。您可以像这样在控制台中编写它(函数(x)toupper(x))(y),并在不为函数指定名称的情况下获得结果。太棒了!我已经找了好几天了。起初,我以为我得到的是重复的行,但结果是这些是名称,名称是从源行的值派生的。