试图理解列表的输出

时间:2014-12-10 17:45:22

标签: 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]],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

1 个答案:

答案 0 :(得分:0)

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

要解释您的样本输出:
- 在第一个(最左侧)列中,从第4行开始有两个1(M [4,1],M [5,1]为1)
- 在第二列中,从第2行开始有两个1(意思是第2行,第3行是1),第3行(意思是第3行和第4行是1) - 在第三行中,有两个1从第3行开始

如果你打印矩阵M,你可以检查这是否属实,矩阵M给你的种子看起来像这样

     [,1] [,2] [,3]
[1,]    0    0    1
[2,]    1    1    0
[3,]    0    1    1
[4,]    1    1    1
[5,]    1    0    0

我希望说清楚。

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