我想编写一个自定义阈值函数:
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。
答案 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)
}