如何使用带有特殊序列的 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