我想知道R是否有可能这样做:
list <- c(x1, x2, x3, x4, xn...)
x1
放在列表底部,显示c(x2, x3, x4, xn.. x1)
。c(x3, x4, x5... x1, x2)
这可能在R?
答案 0 :(得分:3)
我不知道你要做什么,但在下面的例子中,你可以“看到”(print
)循环在每次运行中的作用:
#a vector (and not list)
vec <- c(5:10)
#the loop
for(i in seq_along(vec)) { print(c(vec[-(0:i)], vec[0:i])) }
#[1] 6 7 8 9 10 5
#[1] 7 8 9 10 5 6
#[1] 8 9 10 5 6 7
#[1] 9 10 5 6 7 8
#[1] 10 5 6 7 8 9
#[1] 5 6 7 8 9 10
如果您想存储输出而不仅仅是为了查看它,请考虑以下事项:
> result <- vector("list", length(vec))
> for(i in seq_along(vec)) {
result[[i]] <- c(vec[-(0:i)], vec[0:i])
}
>
> do.call(rbind, result)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 6 7 8 9 10 5
[2,] 7 8 9 10 5 6
[3,] 8 9 10 5 6 7
[4,] 9 10 5 6 7 8
[5,] 10 5 6 7 8 9
[6,] 5 6 7 8 9 10
为了避免在列表中进行预分配以及最后for
循环和rbind
,sapply
是不错的选择
sapply(1:length(vec), function(i) c(vec[-(0:i)], vec[0:i]))
答案 1 :(得分:2)
同上。不知道你想要做什么,但这里有一个返回矩阵的替代方案......
sapply( 0:9 , function(x) c( (1 + x) : 10 , seq_len(x) ) )
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 1 2 3 4 5 6 7 8 9 10
# [2,] 2 3 4 5 6 7 8 9 10 1
# [3,] 3 4 5 6 7 8 9 10 1 2
# [4,] 4 5 6 7 8 9 10 1 2 3
# [5,] 5 6 7 8 9 10 1 2 3 4
# [6,] 6 7 8 9 10 1 2 3 4 5
# [7,] 7 8 9 10 1 2 3 4 5 6
# [8,] 8 9 10 1 2 3 4 5 6 7
# [9,] 9 10 1 2 3 4 5 6 7 8
#[10,] 10 1 2 3 4 5 6 7 8 9