从dplyr数据框中捕获不同的错误

时间:2015-10-01 07:34:54

标签: r if-statement dplyr

我的情况是我的数据框可能包含不同的错误,之后我想用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。

1 个答案:

答案 0 :(得分:1)

如果你强迫sepal_slope numeric TRUE,两个案件的回复都会is.na回复if(is.na(as.numeric(unlist(sepal_slope))[1])) sepal_slope <- 5

ckeditor