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语句不起作用?我做错了什么?
答案 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)
。