r - 未找到搜索词时在 R 中使用 -which() 的意外行为

标签 r

我一直在使用 R which从数据框中删除行的函数。我最近发现,如果搜索词不在 data.frame 中,结果是一个空字符。

# 1: returns A-Q, S-Z (as expected)
LETTERS[-which(LETTERS == "R")]
# 2: returns "character(0)" (not what I would expect)
LETTERS[-which(LETTERS == "1")]
# 3: returns A-Z (expected)
LETTERS[which(LETTERS != "1")]
# 4: returns A-Q, S-Z (expected)
LETTERS[which(LETTERS != "R")]

第二个例子是 -which() 的预期行为吗?什么时候找不到搜索词?我已经将代码切换为使用示例 4 中的语法,这看起来更安全,但我只是好奇。

最佳答案

这是一个众所周知的陷阱。当没有与逻辑测试匹配时,which 函数返回 numeric(0),然后 "["不返回任何内容,而不是返回预期的所有内容。您可以使用:

 LETTERS[ ! LETTERS == "1" ]
 LETTERS[ ! LETTERS %in% "1" ]

还有一个需要注意的问题,它让我选择使用 which()。使用逻辑索引时,“[”中使用的 NA 值将返回一行。我一般不想要那样,所以我使用 DFRM[ which(logical) ]虽然这似乎困扰了一些说不需要的人。我只是认为他们正在处理小型数据集,并且很少遇到在他们的控制台上看到数以万计 NA 引起的无用输出行的烦恼。我从不使用否定的哪个版本。

关于r - 未找到搜索词时在 R 中使用 -which() 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16047825/

相关文章:

Rvest:抓取多个 URL

r - 从 ggpairs 图中打印单行

r - 在 Shiny 的 DataTable 中包含本地 html 文件的链接

r - 格式化dplyr链中的列

r - 更改 ggplot 上的 geom_bar 宽度

R函数从向量中的后续值中减去向量中连续值之间的差

mysql - dbConnect-R中的清理数据是否会改变真实数据库中的数据值

r - 拆分R中不同列中的值

r - ggplot2 绘制比数据框中更多的点,geom_point + facet_grid

r - 将两列合并为一列,在 R 中逐个元素