在R中使用数组输入的if-else语句

时间:2016-08-09 19:08:57

标签: r function dataframe

我想编写一个自定义阈值函数:

doubleThres <- function(value)
{
  if(value >=0.8)
  {
    value = value * 0.8

  }

  if( value < 0.5)
  {
    value = max(value * 1.2, value + 0.1)
  }
  return(value)
}

如果我输入一个像1.2这样的单个值,那么该函数可以正常工作。 但是,我想输入一个数组,这是数据框的一列。

doubleThres(myDataFrame$value)

然后它会报告错误。

In if (vale >= 0.8) { :
  the condition has length > 1 and only the first element will be used

我知道这个功能有问题,但我不知道如何以简单的方式纠正它,而不使用函数中的for-loop。

1 个答案:

答案 0 :(得分:3)

评论中已有建议可行,但如果你想保留你的功能结构,你可以使用逻辑索引:

doubleThres <- function(value)
{
    value[value >= 0.8] <- value[value >= 0.8] * 0.8
    value[value < 0.5] <- pmax(value[value < 0.5] * 1.2, value[value < 0.5] + 0.1)
    return(value)
}