2016-12-06 2 views
0

У меня есть этот код:R - как преобразовать два цикла `for` в` lapply`?

getSomething = function(x, y) { 
     return something 
    } 

    b = matrix(NA, nrow = ncol(a), ncol = ncol(a)) 

    # Loop through the columns 
    for(i in 1:ncol(a)) { 
     # Loop through the columns for each column 
     for(j in 1:ncol(a)) { 
     b[i, j] = getSomething(as.matrix(a[i]), as.matrix(a[j])) 
     } 
    } 

Он работает просто отлично, но когда я пытаюсь запустить код на больших наборах данных, это занимает очень много времени для запуска.

Как его преобразовать в lapply, чтобы он мог работать быстрее?

спасибо.

ответ

0

Вместо того чтобы использовать lapply, посмотрите на outer, который делает эти петли для вас:

outer(seq(ncol(a)), seq(ncol(a)), 
     FUN=function(i, j) getSomething(as.matrix(a[i]), as.matrix(a[j])) 
) 
+0

Спасибо за ваш ответ, но я до сих пор получил сообщение об ошибке: 'тускнеет [продукт 3249] не соответствует длине объекта [1] '(3249 происходит от 57 * 57,' a' имеет 57 переменных с 200 наблюдениями). Нужно ли учитывать количество наблюдений в 'a'? – cellardoors

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