我一直用Rwhich
函数从数据框中删除行。我最近发现,如果搜索词不在 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 中的语法,这看起来更安全,但我只是好奇。
这是一个众所周知的陷阱。当没有任何内容与逻辑测试匹配时,哪个函数返回 numeric(0),然后“[”不返回任何内容,而不是返回预期的所有内容。您可以使用:
LETTERS[ ! LETTERS == "1" ]
LETTERS[ ! LETTERS %in% "1" ]
还有另一个需要注意的问题,也是让我选择使用 which() 的问题。当使用逻辑索引时,“[”内使用的 NA 值将返回一行。我通常不希望这样,所以我使用DFRM[ which(logical) ]
尽管这似乎让一些人感到困扰,他们说没有必要。我只是认为他们正在处理小型数据集,并且很少会遇到在控制台上看到数以万计的 NA 引起的无用输出行的烦恼。我never但使用否定的哪个版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)