如何提高嵌套ifelse中逐行计算的性能?

时间:2015-04-08 09:45:51

标签: r performance if-statement row

在这个论坛中,我找到了一种很好的方法,可以在R中对行进行逐行计算,然后将其存储在新创建的列中(c3)。

在下面提供的代码中,嵌套的ifelse()语句以三个级别(a1范围从1到3)为例进行说明。

a1 <-   1 # variable 1; for this example it's either 1 or not.
a2 <-   2 # range: up to 10 values (e.g. for this example 1:10)

c1 <- c(1:6)   # column 1 as sample data set
c2 <- c(11:16) # column 2 as sample data set

# column 3 calculated based on row wise operations
c3 <- ifelse(a1==1 & a2==1,1,ifelse(a1==1 & a2==2,2,ifelse(a1==1 & a2==3,3,4))) 

r <- t(rbind(c1,c2,c3))
r

现在我需要ifelse()语句嵌套10(!)次(至少)。像

这样的东西
ifelse(a1 == 1 & a2 ==1,,ifelse(a1 == 1 & a2 ==2,,ifelse(a1 == 1 & a2 ==3,,ifelse(a1 == 1 & a2 ==4,,ifelse(a1 == 1 & a2 ==5,,ifelse(a1 == 1 & a2 ==6,,ifelse(a1 == 1 & a2 ==7,,ifelse(a1 == 1 & a2 ==8,,ifelse(a1 == 1 & a2 ==9,,)))))))))

虽然这样的嵌套ifelse()语句可能适用于2或3级,但我想知道是否有更高效(性能更快)的方法来执行这10个嵌套的行式操作。

我可以补充一下:根据嵌套的级别,必须进行不同的计算。因此,例如(1)在现实生活中看起来更像(2)。

(1) ifelse(a1==1 & a2==1,1, etc)
(2) ifelse(a1==1 & a2==1,variable1*(1+variable2 /variable3), etc)

系统:Mac OS X Mavericks,RStudio:R版本3.1.1(2014-07-10)

1 个答案:

答案 0 :(得分:1)

创建一个查找表:

lookup=data.frame(a=rep(1:2, 2), b=rep(1:2, each=2), value=1:4)

c3 = with(lookup, lookup[a==a1 & b==a2,]$value)

cbind(c1,c2,c3)