Я новичок в R, это может быть глупый вопрос, но я не знаю, как его решить.как сохранить результат в списке из цикла for
У меня есть цикл for, который вернет возможно i * j непустые элементы.
Я хочу сохранить все непустые результаты в списке, но если я использую result[[i]]<-tmp
в цикле, он может хранить только до i
элементов, как я могу хранить все значения в списке? Благодарности
result<-list()
for (i in 1:nrow(m)){
for (j in 1:i){
if(m[i,j]!=0 && m[j,i]!=0){
num=min(m[i,j],m[j,i])
tmp=c(i,j,num)
result[[i]]<-tmp
}
}
}
sample data
set.seed(123)
m= matrix(sample(0:5, size = 5*5, replace = TRUE), ncol = 5)
Желаемый ответ
row col min
[1] 1 1 1
[1] 2 2 3
[1] 3 1 2
[1] 3 2 2
[1] 3 3 4
[1] 4 1 5
[1] 4 2 1
[1] 4 4 1
[1] 5 1 5
[1] 5 2 2
[1] 5 4 5
[1] 5 5 3
Per Давида
pmin(mx[upper.tri(mx, diag = TRUE)], mx[lower.tri(mx, diag = TRUE)])
[1] 1 0 2 5 2 3 5 1 0 1 3 0 1 5 3
возвращает
> result
[[1]]
[1] 1 1 2
[[2]]
[1] 2 2 3
[[3]]
[1] 3 3 4
[[4]]
[1] 4 4 2
[[5]]
[1] 5 5 4
Для петель и растущих списков в R оба очень медленно. Можете ли вы переосмыслить свой алгоритм как функцию, применяемую к каждому элементу матрицы, и использовать 'apply()'? –
Разве вы в основном не вычисляете 'pmin (m, t (m))'? –
Я не уверен, что вы пытаетесь сделать и что именно не работает. Вам также не нужен такой большой набор данных, чтобы воспроизвести вашу проблему. Я думаю, что что-то вроде 'm = matrix (sample.int (5, size = 5 * 5, replace = TRUE), ncol = 5)' должно делать. Также используйте 'set.seed' и покажите, что вы ожидаете получить от своего цикла' for'. –