【发布时间】:2020-11-04 13:59:25
【问题描述】:
根据other answers,可以在管道和dplyr 函数中包含if 语句。但是对于filter,似乎需要使用else 而不仅仅是if,否则filter 将不返回任何内容,调用错误:
没有适用于类对象的“filter_”方法 “空”
恕我直言,这是相当具有误导性的,因为我没有使用filter_,也没有亲自为管道提供 NULL 类对象。最小代表:
data(mtcars)
a <- 1
mtcars %>% filter(if (a == 1) cyl == 6) # if in filter works
a <- NA
mtcars %>% filter(if (is.na(a)) cyl == 6) # is.na in if in filter works if it evaluates to true
a <- 4
mtcars %>% filter(if (!is.na(a)) cyl == a) # !is.na works if it evaluates to true
a <- NA
mtcars %>% filter(if (!is.na(a)) cyl == a) # doesn't work if it evaluates to false
# Input `..1` must be of size 32 or 1, not size 0.
可以使用 else 从过滤器中生成输出,方法是选择包含所有结果的过滤器约束。
mtcars %>% filter(if (!is.na(a)) cyl == a else carb > 0
可能有一个更好的包罗万象的过滤器约束,实际上可能是一种更优雅的方法,但我找不到其他人发现了这个问题,所以如果没有其他问题,希望我的进步能够满足@987654322 @。
任何有关这是否是错误或其他解决方法的情报,都非常欢迎。谢谢。
【问题讨论】:
标签: r if-statement filter dplyr