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"
Run Code Online (Sandbox Code Playgroud)
为什么sapply()返回一个以旧值作为属性的向量?我不想要它们,我不需要它们,并且当应用于例如数值向量时我不知道这种行为。
默认情况下,sapply()为字符向量上的每次迭代添加名称。USE.NAMES = FALSE通过在调用中使用,可以在没有名称的情况下传递结果。
sapply(y, toupper, USE.NAMES = FALSE)
# [1] "HELLO" "BOB" "DAN"
Run Code Online (Sandbox Code Playgroud)
这在中进行了解释help(sapply)
USE.NAMES - 逻辑;如果为 TRUE 并且 X 是字符,则使用 X 作为结果的名称,除非它已经有名称。由于该论证遵循...,因此其名称不能缩写。
请注意,当您仅应用单个函数时,无需使用匿名函数(匿名函数的使用效率也稍低)。上面也显示了这一点。
另请注意,sapply()这里不需要,因为toupper()是矢量化的。
toupper(y)
# [1] "HELLO" "BOB" "DAN"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1931 次 |
| 最近记录: |