【问题标题】:the condition has length > 1 and only the first element will be used in if else statement条件的长度 > 1 并且只有第一个元素将用于 if else 语句
【发布时间】:2015-12-02 21:09:53
【问题描述】:
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,并且只会使用第一个元素”还有其他选择吗??

【问题讨论】:

  • 您可能正在寻找ifelse
  • ifelseif 的矢量化替代方案。但是,如果您用文字描述您正在尝试做的事情,可能会有更好的方法。
  • 我正在处理气候数据,如果值高于我在代码中定义的阈值,我想乘以一个因子,否则我想做分位数映射。 (我不想放整个代码,因为它可能会造成混乱)
  • 你看过包 qmap 吗?
  • 是的,我做了,我只想对低于某个阈值的降水值进行分位数映射。

标签: r


【解决方案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

【讨论】:

  • 感谢您的帮助。我尝试使用上面的脚本..因为我的数据有 NA 值...我收到一条错误消息,说“在数据帧的下标分配中不允许缺少值”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
相关资源
最近更新 更多