向量的全局条件

时间:2014-07-30 10:00:45

标签: r vector conditional-statements global

.Hi

我想对我的矢量进行比较操作:我得到一个数值,我想在2 ^中进行变换。但是,如果一个值在转换后大于65000,我希望整个矢量都没有变换。

目前我正在尝试这个:

final<-ifelse((2^vec>65000)vec,2^vec)

它适用于每个值,但效果很好。因此,如果转换后一个大于65000,则此代码返回初始值,但如果超过65000,则返回转换后的值,并且我有一个带有转换值和非转换值的混合向量。

这里有一个例子:

> vec
32.82    576.47     36.45     78.93      8.77     63.28    176.86      1.88    291.97     35.59

我的代码后的结果

> final

32.820000 576.470000 36.450000 78.930000 436.549065 63.280000 176.860000 3.680751 291.970000 35.590000

在这里,您可以看到某些值已被转换而不是。在这种情况下,我最终希望fina = vec。我尝试过&#34;休息&#34;而不是vec用于&#34;是&#34;在ifelse中的条件,但它确实有效。可能这样的东西可以起作用,但我不知道。

如果有人有想法^^  感谢

1 个答案:

答案 0 :(得分:1)

这是怎么回事?

log_if_bigger = function(vec, thresh){
  if(any(vec>thresh)){
    return(log2(vec))
  }else{
    return(vec)
 }
}

用法:

# if any values, bigger than 0 then log - here there are:
> log_if_bigger(c(1,2,3,4),0)
[1] 0.000000 1.000000 1.584963 2.000000


# if any values bigger than 9 then log - here there arent:
> log_if_bigger(c(1,2,3,4),9)
[1] 1 2 3 4

然后你只需要:

final = log_if_bigger(vec, 65000)

或可能:

final = log_if_bigger(vec, log2(65000))

根据您测试2^vec>65000

的情况而定