【问题标题】:How can I use the for loop with special seq如何使用带有特殊 seq 的 for 循环
【发布时间】:2021-02-26 17:31:31
【问题描述】:

我想创建一个 for 循环,其中 seq 是数组的元素。

所以就像我有一个这样的数组:

int <- array(c(30,60,150,300,450,1500))

我希望第一个 j 是 30,第二个是 60 ...等等。

但是当我明显尝试这个时:

for (j in int)

这不起作用。

我该如何解决这个问题?

【问题讨论】:

  • 您可以使用seq(30, length.out =2, by = 30)。关于值 150、300 和 450、1500,模式不清楚
  • 我真的试图正确解释我的问题,但这对我来说很难。所以我希望我的 for 循环中的“j”第一次是 30,第二次是 60,然后是 150。所以我为这些数字创建了一个数组。
  • 如果您使用for(j in int) print(j),它会打印该值
  • 我想要一个序列,其中数组的元素被 j 占据。阵列中有云底高度。在第一种情况下,我检查云底高度为 30 米时,因此 j = 30 等。

标签: r arrays for-loop seq


【解决方案1】:

我们可以使用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)]

【讨论】:

    【解决方案2】:

    你在找这个吗?

    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 的第二个参数是起始索引。

    【讨论】:

      【解决方案3】:

      另一个基本 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
      

      【讨论】:

        猜你喜欢
        • 2014-09-13
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-22
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        相关资源
        最近更新 更多