我在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)
怎么做?
我工作的矢量非常大。
答案 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))