【问题标题】:Nested for-loop with lists带有列表的嵌套 for 循环
【发布时间】:2020-07-26 23:28:14
【问题描述】:

所以我想
(1) 使用向量函数创建一个大小为 3 的列表,命名为 x,y,z
(2):写一个嵌套的for循环,外层循环遍历列表(n=1:N),内层from t=1:4
(3):分配给向量中每个第t个位置的第n个列表,值10n+t

我目前得到的是

N = 3
N_list <- vector(mode = "list", length = N) 
list_names <- c('x', 'y', 'z')
names(N_list) <- list_names
inner <- NULL
for (n in 1:N) {
    for (t in 1:4) {
        inner[[t]] <- t  
    }
    N_list[[n]] <- (10*n+inner[[t]]) 
}

虽然我希望列表是这样的:

$x  
[1] 11, 12, 13, 14  
$y    
[1] 21, 22, 23, 24  
$z  
[1] 31, 32, 33, 34  

我实际上每个列表只得到 14、24、34。

虽然我搜索了很多文章来了解嵌套for循环的逻辑,但我仍然不知道该怎么做。有人可以帮我解决这个问题吗?提前谢谢你。

【问题讨论】:

    标签: r list for-loop nested-for-loop


    【解决方案1】:

    你几乎是正确的。看看这个:

    N = 3
    N_list <- vector(mode = "list", length = N) 
    list_names <- c('x', 'y', 'z')
    names(N_list) <- list_names
    
    for (n in 1:N) {
        inner <- NULL # You should define inner here.
        for (t in 1:4) {
            inner[t] <- t  
        }
        N_list[[n]] <- (10 * n + inner) 
    }
    
    N_list
    $x
    [1] 11 12 13 14
    
    $y
    [1] 21 22 23 24
    
    $z
    [1] 31 32 33 34
    

    【讨论】:

    • 谢谢!可以肯定的是,假设在外部 for 循环中使用了“内部”,我应该在整个 for 循环代码之前定义这个“内部”吗?
    • 那么它不会像预期的那样改变。你不应该在外循环之外定义它。
    • 哦,我明白了,非常感谢!抱歉,我是 Stack Overflow 的新手,如果我接受解决方案,问题会自动关闭吗?我在页面上找不到关闭按钮。
    • 答案一旦被接受,就说明问题已经解决了。
    【解决方案2】:

    您可以通过一个 for 循环来做到这一点:

    N = 3
    N_list <- vector(mode = "list", length = N) 
    list_names <- c('x', 'y', 'z')
    names(N_list) <- list_names
    inner <- 1:4
    
    for (n in 1:N) {
       N_list[[n]] <- (10*n+inner) 
    }
    N_list
    #$x
    #[1] 11 12 13 14
    
    #$y
    #[1] 21 22 23 24
    
    #$z
    #[1] 31 32 33 34
    

    你也可以使用lapply

    lapply(seq_len(N), function(x) 10 * x + inner)
    

    【讨论】:

    • 感谢您的评论!在这种情况下, lapply 似乎是一种更好、更简单的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2021-08-21
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多