【问题标题】:Should I use 'which' on filters?我应该在过滤器上使用 \'which\' 吗?
【发布时间】:2023-02-01 00:45:25
【问题描述】:

过滤数据集时,您可以使用:

df[df$column==value,]

或者

df[which(df$column==value),]

第一个过滤器返回一个逻辑向量。第二个返回索引列表(在该逻辑向量中值为“True”的索引)。我应该用一个比另一个更好吗?我看到有时第一个返回所有值为 NA 的行......

两种表达方式哪个更正确?

谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    你应该(几乎)总是喜欢第一个版本。

    为什么?因为它更简单。不要给你的代码增加不必要的复杂性——编程已经够难了,我们不想让它变得更难;和小的复杂性以超线性方式相互叠加。

    您可能想要使用 which 的一种情况是当您的输入包含您想要忽略的 NA 时:

    df = data.frame(column = c(1, NA, 2, 3))
    
    df[df$column == 1, ]
    # 1 NA
    
    df[which(df$column == 1), ]
    # 1
    

    然而,即使在这种情况下我不会使用which;相反,我会处理 NA 的存在明确地记录代码期望 NAs 和想要来处理它们。这个想法再次是使代码尽可能简单和不言自明。这意味着明确您的意图,而不是将其隐藏在不明显的功能后面。

    也就是说,在存在 NA 的情况下,我将使用以下内容而不是 which

    df[! is.na(df$column) & df$column == 1, ]
    

    【讨论】:

      猜你喜欢
      • 2014-04-13
      • 2014-06-30
      • 2013-06-10
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      • 2012-10-02
      相关资源
      最近更新 更多