.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中的条件,但它确实有效。可能这样的东西可以起作用,但我不知道。
如果有人有想法^^ 感谢
答案 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