R 试图理解列表的输出

R 试图理解列表的输出,r,R,我想知道是否有人能帮助我理解这个函数的输出。我知道它应该返回长度为2的运行位置,但我不确定如何解释输出 fun1 = function(M,k) { n = nrow(M) m = ncol(M) runs = vector('list',length=m) for(i in 1:m) { for(j in 1:(n-k+1)) { if(all(M[j:(j+k-1),i]==1)) runs[[i]] = c(runs[[i]]

我想知道是否有人能帮助我理解这个函数的输出。我知道它应该返回长度为2的运行位置,但我不确定如何解释输出

fun1 = function(M,k) {
    n = nrow(M)
    m = ncol(M)
    runs = vector('list',length=m)
    for(i in 1:m) {
        for(j in 1:(n-k+1)) {
        if(all(M[j:(j+k-1),i]==1)) runs[[i]] = c(runs[[i]],j)
        }
    }
    return(runs)
}

set.seed(123) 
M = matrix(sample(0:1,size=15,replace=TRUE),ncol=3,nrow=5) 

fun1(M,2)
输出:

[[1]]
[1] 4

[[2]]
[1] 2 3

[[3]]
[1] 3

列表中的每个元素都是一列的输出,从最左边的列开始。数字列表或NULL(如果没有)提供该列中的行号,其中一行中有两个1

要解释示例输出,请执行以下操作: -在最左边的第一列中,有两个1从第4行开始,M[4,1]和M[5,1]都是1 -在第二列中,有两个1从第2行开始,表示第2行和第3行是1,在第3行也表示第3行和第4行是1 -在第三行中,有两个1从第3行开始

如果你打印我们的矩阵M,你可以检查这是真的,给定你的种子看起来像这样

     [,1] [,2] [,3]
[1,]    0    0    1
[2,]    1    1    0
[3,]    0    1    1
[4,]    1    1    1
[5,]    1    0    0
我希望这能说明问题


顺便说一句,在将来,尝试使用适当的缩进和换行来更好地格式化代码。我不得不手动添加换行符以使示例代码正常工作,但给出一个种子做得很好:

哦,不,很抱歉格式化了。但是非常感谢你的回答。现在我觉得这很有道理: