如果语句中的R错误

时间:2016-08-05 14:20:15

标签: r if-statement

if(df$tfp_count > 50){

  mdlds <- lm(ltfp_sd~factor(country)+factor(year)+factor(sector),data=df)
  mdliqr<- lm(ltfp_iqr~factor(country)+factor(year)+factor(sector),data=df)
  sumds <- summary(mdlds)$coefficients
  sumdiqr <- summary(mdliqr)$coefficients
  }

我收到此错误:

In if (df$tfp_count > 50) { :
  the condition has length > 1 and only the first element will be used

为什么我的if语句不起作用?我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果if语句被赋予长度大于1的向量,则它将仅使用第一个元素。 if-statment仍然有效,但只使用向量的第一个元素。

Iterator

您收到的是警告,而不是错误,但注意并确保行为与您收到警告时的预期一致是很好的。如果您想“折叠”条件问题,请查看tst1 <- c(TRUE, FALSE) tst2 <- c(FALSE, TRUE) if (tst1) print("hello") # [1] "hello" # Warning message: # In if (tst1) print("hello") : # the condition has length > 1 and only the first element will be used if (tst2) print("hello") ## Will not print "hello" # Warning message: # In if (tst1) print("hello") : # the condition has length > 1 and only the first element will be used ?any

?all

要迭代向量并执行if语句,最好创建一个循环。我鼓励你将if语句包装在一个函数中。

if (any(tst2)) print("hello")
# [1] "hello"

if (all(tst1)) print("hello") ## will not print hello

答案 1 :(得分:0)

如果df$tfp_count的长度大于1(看起来确实如此),那么您关心的是df$tfp_count中的任何值是否大于50,您可以使用:

if(max(df$tfp_count) > 50){

  mdlds <- lm(ltfp_sd~factor(country)+factor(year)+factor(sector),data=df)
  mdliqr<- lm(ltfp_iqr~factor(country)+factor(year)+factor(sector),data=df)
  sumds <- summary(mdlds)$coefficients
  sumdiqr <- summary(mdliqr)$coefficients
  }

如果变量中包含NA个值,请使用max(df$tfp_count,na.rm=T)