说我们有:
vector <- c(3:10)
我想在奇数位置的向量中找到元素,将所有元素放在偶数位置到v
的末尾,顺序颠倒。
所以它看起来像
结果
3 5 7 9
RESULT2
3 5 7 9 10 8 6 4
但我需要一个简短的函数,不能使用循环
答案 0 :(得分:2)
您可以尝试这样的事情
vector <- 3:10
n <- length(vector)
c(vector[seq(n) %% 2 == 1], rev(vector[seq(n) %% 2 == 0]))
## [1] 3 5 7 9 10 8 6 4
答案 1 :(得分:2)
快一点:
n <- length(vector)/2
result <- vector[c(2*(1:n)-1,2*(n:1))]
速度比较:
vector <- 3:10
system.time(
for ( i in 1:100000 )
{
n <- length(vector)/2
result_A <- vector[c(2*(1:n)-1,2*(n:1))]
}
)
system.time(
for ( i in 1:100000 )
{
n <- length(vector)
result_B <- c(vector[seq(n) %% 2 == 1], rev(vector[seq(n) %% 2 == 0]))
}
)
system.time(
for ( i in 1:100000 )
{
result_C <- c(vector[c(TRUE, FALSE)], rev(vector[c(FALSE, TRUE)]))
}
)
> vector <- 3:10
> system.time(
+ for ( i in 1:100000 )
+ {
+ n <- length(vector)/2
+ result_A <- vector[c(2*(1:n)-1,2*(n:1))]
+ }
+ )
user system elapsed
0.64 0.00 0.65
> system.time(
+ for ( i in 1:100000 )
+ {
+ n <- length(vector)
+ result_B <- c(vector[seq(n) %% 2 == 1], rev(vector[seq(n) %% 2 == 0]))
.... [TRUNCATED]
user system elapsed
10.78 0.00 10.86
> system.time(
+ for ( i in 1:100000 )
+ {
+ result_C <- c(vector[c(TRUE, FALSE)], rev(vector[c(FALSE, TRUE)]))
+ }
+ )
user system elapsed
2.81 0.00 2.83
> result_A
[1] 3 5 7 9 10 8 6 4
> result_B
[1] 3 5 7 9 10 8 6 4
> result_C
[1] 3 5 7 9 10 8 6 4
>
答案 2 :(得分:1)
我认为你最直接的方法是
vector <- 3:10
result <- vector[c(TRUE, FALSE)]
result2 <- c(vector[c(TRUE, FALSE)], rev(vector[c(FALSE, TRUE)]))
答案 3 :(得分:0)
c(seq(min(vector), max(vector), by=2), rev(vector[!vector %in% a]))
# [1] 3 5 7 9 10 8 6 4