2014-12-10 6 views
0

Мне было интересно, может ли кто-нибудь помочь мне понять выход этой функции. Я знаю, что он должен возвращать позиции, в которых есть пробег длины 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 

ответ

0

Каждый элемент в списке является выходным для столбца, начиная с самой левой колонке. Список номеров (или NULL, если их нет), дает номера строк в этом столбце, где есть две строки в строке.

Для интерпретации выходного сигнала выборки у вас есть:
- В первом (левом) столбце есть два 1, начиная с строки 4 (M [4,1] и M [5,1]: 1)
- Во второй колонке есть две строки, начинающиеся со строки 2 (значение строки 2 и строка 3 равны 1), а также в строке 3 (значение строки 3 и строки 4 равны 1)
- В третьей строке являются два 1-х, начиная со строки 3

вы можете проверить, что это верно, если вы печатаете нашу матрицу М, которая данное семя ваше выглядит следующим образом

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

Я надеюсь, что это ясно.

Кстати, в будущем попробуйте отформатировать код лучше с соответствующими углублениями и разрывами строк. Мне пришлось вручную добавить разрывы строк, чтобы заставить образец кода работать, но хорошая работа дает семя :)

+0

О нет, извините за форматирование. Но большое вам спасибо за ваш ответ. Теперь это имеет смысл для меня :) – op14

Смежные вопросы