我的情况是我的数据框可能包含不同的错误,之后我想用if
语句捕获这两种情况。
Situtation 1:
数据框包含NA
library(dplyr)
data(iris)
attach(iris)
data <- iris %>% filter(Sepal.Length >=7.9)
sepal_slope <- data %>% group_by(Species) %>%
do(fit = lm(Sepal.Width ~ Sepal.Length, .)) %>%
summarise(sepal_slope = coef(fit)[2])
这是假的:
nrow(sepal_slope) == 0
# FALSE
is.na
此处为正确
is.na(sepal_slope)
# TRUE
情况2:数据框为空
data <- iris %>% filter(Sepal.Length >=12)
sepal_slope <- data %>% group_by(Species) %>%
do(fit = lm(Sepal.Width ~ Sepal.Length, .)) %>%
summarise(sepal_slope = coef(fit)[2])
现在这是正确的:
nrow(sepal_slope) == 0
# TRUE
但这会产生错误:
is.na(sepal_slope)
# sepal_slope
所以我不能用
if(nrow(sepal_slope) == 0 | is.na(sepal_slope)) sepal_slope <- 5
# Error in if (nrow(sepal_slope) == 0 | is.na(sepal_slope)) sepal_slope <- 5 :
argument is of length zero
如何在一个if语句中捕获这两种情况
当然,应该处理sepal_slope包含num值的情况,如果默认情况下这里应该为TRUE。
答案 0 :(得分:1)
如果你强迫sepal_slope
numeric
TRUE
,两个案件的回复都会is.na
回复if(is.na(as.numeric(unlist(sepal_slope))[1])) sepal_slope <- 5
。
ckeditor