R中的嵌套ifelse计算

时间:2015-03-20 20:04:29

标签: r

我是R的新手,我发现嵌套的ifelse功能并不像我期望的那样。首先,一些信息用作我的函数的输入:

loss_cor_df<-data.frame(from_1=c(0,.4,0), to_1=c(0,.5,0), 
                    from_2=c(0,.55,0), to_2=c(0,.65,0),  
                    from_3=c(0,.75,0), to_3=c(0,.85,0) 
                    )

loss_cor_dol<-100*loss_cor_df

loss_cor_rate_df<-data.frame(rate_1=c(0,0.5,0), rate_2=c(0,0.75,0), rate_3=c(0,1,0))

我的功能:

apply_lc<- function(x, lc, rate) 
{ifelse(x>=lc$from_3, -rate$rate_1*(min(x,lc$to_1) - lc$from_1) - rate$rate_2*(min(x,lc$to_2)-lc$from_2) - rate$rate_3*(min(x,lc$to_3)-lc$from_3),
ifelse(x>=lc$from_2,  -rate$rate_1*(min(x,lc$to_1) - lc$from_1) - rate$rate_2*(min(x,lc$to_2)-lc$from_2),  
  ifelse(x>=lc$from_1, -rate$rate_1*(min(x,lc$to_1) - lc$from_1),
    0)))
}

如果我将其应用于标量,我会得到预期的结果。

> apply_lc(85,loss_cor_dol[2,], loss_cor_rate_df[2,])
[1] -22.5

但是,当我尝试以下操作时,我不再能得到正确答案。

> apply_lc(c(85,80),loss_cor_dol[2,], loss_cor_rate_df[2,])
[1] -17.5 -17.5

我可以使用for循环和&#34;其他&#34; if ... else功能。但是,出于性能原因,我希望将操作向量化。 &#34;申请&#34;如果我的数据中的每一列都不同,函数的输入可能会有所不同,那么它似乎不会起作用。我怀疑我对R解释这些信息的方式有一个根本的误解,并且非常感谢任何支持。

0 个答案:

没有答案