如何使用带有特殊序列的 for 循环
How can I use the for loop with special seq
我想制作一个 for 循环,其中 seq 是数组的元素。
就像我有一个这样的数组:
int <- array(c(30,60,150,300,450,1500))
我希望第一个 j 是 30,第二个是 60 ...等等
但是当我显然尝试这样做时:
for (j in int)
这没有用。
我该如何解决这个问题?
你在找这个吗?
Map(function(x) int[x:length(int)], seq(int))
# [[1]]
# [1] 30 60 150 300 450 1500
#
# [[2]]
# [1] 60 150 300 450 1500
#
# [[3]]
# [1] 150 300 450 1500
#
# [[4]]
# [1] 300 450 1500
#
# [[5]]
# [1] 450 1500
#
# [[6]]
# [1] 1500
或者这个
Map(function(x) int[x:length(int)], 1:3)
# [[1]]
# [1] 30 60 150 300 450 1500
#
# [[2]]
# [1] 60 150 300 450 1500
#
# [[3]]
# [1] 150 300 450 1500
无论如何,Map
的第二个参数是起始索引。
我们可以使用embed
m1 <- embed(c(int, int), length(int))[seq_along(int),]
m1[lower.tri(m1)] <- NA
lapply(asplit(m1, 1), function(x) rev(x[!is.na(x)]))
#[[1]]
#[1] 30 60 150 300 450 1500
#[[2]]
#[1] 60 150 300 450 1500
#[[3]]
#[1] 150 300 450 1500
#[[4]]
#[1] 300 450 1500
#[[5]]
#[1] 450 1500
#[[6]]
#[1] 1500
或使用 for
循环
out <- vector('list', length(int))
for(i in seq_along(int)) out[[i]] <- if(i == 1) int else int[-seq(i -1)]
另一个基础 R 选项
> lapply(-seq_along(int), tail, x = c(NA, int))
[[1]]
[1] 30 60 150 300 450 1500
[[2]]
[1] 60 150 300 450 1500
[[3]]
[1] 150 300 450 1500
[[4]]
[1] 300 450 1500
[[5]]
[1] 450 1500
[[6]]
[1] 1500
我想制作一个 for 循环,其中 seq 是数组的元素。
就像我有一个这样的数组:
int <- array(c(30,60,150,300,450,1500))
我希望第一个 j 是 30,第二个是 60 ...等等
但是当我显然尝试这样做时:
for (j in int)
这没有用。
我该如何解决这个问题?
你在找这个吗?
Map(function(x) int[x:length(int)], seq(int))
# [[1]]
# [1] 30 60 150 300 450 1500
#
# [[2]]
# [1] 60 150 300 450 1500
#
# [[3]]
# [1] 150 300 450 1500
#
# [[4]]
# [1] 300 450 1500
#
# [[5]]
# [1] 450 1500
#
# [[6]]
# [1] 1500
或者这个
Map(function(x) int[x:length(int)], 1:3)
# [[1]]
# [1] 30 60 150 300 450 1500
#
# [[2]]
# [1] 60 150 300 450 1500
#
# [[3]]
# [1] 150 300 450 1500
无论如何,Map
的第二个参数是起始索引。
我们可以使用embed
m1 <- embed(c(int, int), length(int))[seq_along(int),]
m1[lower.tri(m1)] <- NA
lapply(asplit(m1, 1), function(x) rev(x[!is.na(x)]))
#[[1]]
#[1] 30 60 150 300 450 1500
#[[2]]
#[1] 60 150 300 450 1500
#[[3]]
#[1] 150 300 450 1500
#[[4]]
#[1] 300 450 1500
#[[5]]
#[1] 450 1500
#[[6]]
#[1] 1500
或使用 for
循环
out <- vector('list', length(int))
for(i in seq_along(int)) out[[i]] <- if(i == 1) int else int[-seq(i -1)]
另一个基础 R 选项
> lapply(-seq_along(int), tail, x = c(NA, int))
[[1]]
[1] 30 60 150 300 450 1500
[[2]]
[1] 60 150 300 450 1500
[[3]]
[1] 150 300 450 1500
[[4]]
[1] 300 450 1500
[[5]]
[1] 450 1500
[[6]]
[1] 1500