条件的长度> 1,if else语句中只使用第一个元素

时间:2015-12-02 21:09:53

标签: r

pred=data.frame(seq(1,100,by=2))
obs=data.frame(seq(1,100,by=3))
pr=data.frame(seq(1,200,by=4))
for (i in 1:dim(pred)[2]) {
  if (pr[,i]>max(pred[,i],na.rm=T)){
    pr[,i]=pr[,i]*(max(obs[,i],na.rm=T)/max(pred[,i],na.rm=T))}}

我收到错误"条件有长度> 1,只使用第一个元素"任何替代方案??

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望将符合条件的所有值乘以因子。对于你的例子,它将是:

pred=data.frame(seq(1,100,by=2))
obs=data.frame(seq(1,100,by=3))
pr=data.frame(seq(1,200,by=4))
condition <- pr[,1] > max(pred[,1],na.rm=T)
#set NA values false
condition[is.na(condition)] <- F
fac <- max(obs[,1],na.rm=T)/max(pred[,1],na.rm=T)
pr[condition,1] <- pr[condition,1]*fac
#do other stuff if the condition is false