gpt4 book ai didi

r - 为什么 sapply() 在字符上使用时会返回一个带有属性的列表?

转载 作者:行者123 更新时间:2023-12-02 00:58:17 25 4
gpt4 key购买 nike

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() 返回一个以旧值作为属性的向量?我不想要它们,我不需要它们,而且我不知道这种行为,例如应用于数值向量。

最佳答案

默认情况下,sapply() 为字符向量的每次迭代添加名称。通过在调用中使用 USE.NAMES = FALSE,可以在没有名称的情况下传递结果。

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

这在help(sapply)中有解释

USE.NAMES - logical; if TRUE and if X is character, use X as names for the result unless it had names already. Since this argument follows ... its name cannot be abbreviated.

请注意,当您仅应用单个函数时,无需使用匿名函数(匿名函数的使用效率也稍低)。这也显示在上面。

另请注意 sapply() 在这里不是必需的,因为 toupper() 是矢量化的。

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

关于r - 为什么 sapply() 在字符上使用时会返回一个带有属性的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31867675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com