在字符向量上使用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()
会返回一个旧值作为属性的向量?我不想要它们,我不需要它们,当我应用于例如时,我不知道这种行为。数值向量。
答案 0 :(得分:4)
默认情况下,sapply()
为字符向量上的每次迭代添加名称。
通过在呼叫中使用USE.NAMES = FALSE
,可以在没有名称的情况下传递结果。
sapply(y, toupper, USE.NAMES = FALSE)
# [1] "HELLO" "BOB" "DAN"
help(sapply)
USE.NAMES - 逻辑;如果为TRUE且X是字符,则使用X作为结果的名称,除非它已经有名称。由于这个论点如下......它的名字不能缩写。
注意,当您仅应用单个函数时,不需要使用匿名函数(匿名函数使用效率稍差)。这也显示在上面。
另请注意此处不需要sapply()
,因为toupper()
已经过矢量化。
toupper(y)
# [1] "HELLO" "BOB" "DAN"