R 将长向量中的元素剪裁为+/-门槛

R 将长向量中的元素剪裁为+/-门槛,r,algorithm,clipping,R,Algorithm,Clipping,我在R写程序。我被困在这里 我有向量 X=c(84.05, 108.04, 13.95, -194.05, 64.03, 208.05, 84.13, 57.04) 我想在替换这个向量的所有元素后得到一个向量,这些元素大于180乘以180 所有小于的元素尝试使用pmin > pmin(abs(X), 180)*sign(X) [1] 84.05 108.04 13.95 -180.00 64.03 180.00 84.13 57.04 基准 > Jilbe

我在R写程序。我被困在这里

我有向量

X=c(84.05, 108.04, 13.95, -194.05, 64.03, 208.05, 84.13, 57.04)
我想在替换这个向量的所有元素后得到一个向量,这些元素大于180乘以180
所有小于的元素尝试使用
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
>Jilber MrFlick用户1317221(180,180,X))
>基准测试(复制次数=50000,
+Jilber(),
+MrFlick(),
+user1317221_G(),
+columns=c('test'、'appeased'、'relative'))
测试运行相对
1吉尔伯()0.835 1.000
2 MrFlick()1.2971.553
3用户1317221_G()1.709 2.047
ifelse(X<-180,-180,ifelse(X>180180,X))

我想我更经常看到
pmin(pmax(X,-180),180)
。你认为这更有效吗?工作很好。谢谢你的帮助。@Flick先生,你的解决方案可能比我的更有效,我应该试试。顺便说一句,非常好。我认为效率更高的原因是,在@Jilber建议的第一个代码中,使用了三个函数……正如MrFlick建议的代码一样,其中包括两个函数。我的想法是正确的还是遗漏了什么?谢谢。@MrFlick根据基准测试结果,您的选择比我的慢63%。此操作称为剪切或夹紧。
> 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
ifelse(X < -180,-180, ifelse(X > 180, 180, X))