在R中向量化“if”

时间:2013-07-30 20:01:16

标签: r indexing

我有一个分类概率数组

post <- c(0.73,0.69,0.44,0.55,0.67,0.47,0.08,0.15,0.45,0.35)

我想要检索预测的课程。 现在我用

predicted <- function(post) { 
               function(threshold) {plyr::aaply(post, 1, 
                   function(x) {if(x >= threshold) '+' else '-'})}}

但这似乎是R会有一种语法。

是否有一些更直接的索引表达式?

2 个答案:

答案 0 :(得分:7)

pred <- c("-", "+")[1+(post > 0.5)]

答案 1 :(得分:6)

正如@joran所说:

predicted <- function(post)
   function(threshold) 
      ifelse(post>threshold,"+","-")

我发现函数的嵌套有点令人困惑。

ifelse(post>threshold,"+","-")

看起来非常简单,您甚至可能不需要将其打包到函数中。

或者你可以使用

predicted <- function(post,threshold=0.5,alt=c("+","-"))
      ifelse(post>threshold,alt[1],alt[2])

可选地

predicted <- function(post,threshold=0.5,alt=c("+","-"))
   alt[1+(post<=threshold)]

可能稍微快一些(post>threshold给出一个逻辑向量,当加到1时强制为0/1,结果为#34;低于&#34; 2为&#34;上述&#34)。或者你可以改变alt的顺序,正如@DWin在他的回答中所做的那样。