将长向量中的元素剪切为+/-阈值

时间:2014-11-13 16:32:31

标签: r algorithm clipping

我在R写作程序。我卡在这里。

我有像

这样的矢量
X=c(84.05, 108.04, 13.95, -194.05, 64.03, 208.05, 84.13, 57.04)

我希望在将此矢量的所有元素替换为180°180之后得到一个矢量 以及小于< -180乘-180的所有元素。

就像我想要的那样,

X=c(84.05, 108.04, 13.95,-180, 64.03, 180, 84.13, 57.04)

怎么做?

我工作的矢量非常大。

2 个答案:

答案 0 :(得分:8)

尝试使用pmin

> pmin(abs(X), 180)*sign(X)
[1]   84.05  108.04   13.95 -180.00   64.03  180.00   84.13   57.04

<强>基准

> Jilber <- function() pmin(abs(X), 180)*sign(X)
> MrFlick <- function() pmin(pmax(X, -180), 180)
> user1317221_G <- function() ifelse(X < -180,-180, ifelse(X > 180, 180, X))
> benchmark(replications=50000,
+           Jilber(),
+           MrFlick(),
+           user1317221_G(), 
+           columns=c('test', 'elapsed', 'relative'))
             test elapsed relative
1        Jilber()   0.835    1.000
2       MrFlick()   1.297    1.553
3 user1317221_G()   1.709    2.047

答案 1 :(得分:1)

ifelse(X < -180,-180, ifelse(X > 180, 180, X))