Результаты, транспонированные с помощью R, применяются [дубликаты]

Извините, я только что понял, что на этот вопрос уже был дан ответ здесь.

Это должно быть довольно просто, но я действительно не понимаю, почему это происходит. Кто-нибудь может помочь? Это простой код с примером «данных»:

applyDirichletPrior <- function (row_vector) {
  row_vector_added <- row_vector + min (row_vector)
  row_vector_result <- row_vector_added / sum(row_vector_added)
}
data <- matrix(c(1,2,3,4,5,6,7,8), nrow=2, ncol=4)
applied <- apply(data, 1, function(x) applyDirichletPrior(x))

Выход дается как:

> applied
     [,1]      [,2]
[1,]  0.1 0.1428571
[2,]  0.2 0.2142857
[3,]  0.3 0.2857143
[4,]  0.4 0.3571429

Принимая во внимание, что я ожидаю вывода в том же формате, что и входные данные, например:

> applied
          [,1]      [,2]      [,3]      [,4]
[1,] 0.1000000 0.2000000 0.3000000 0.4000000
[2,] 0.1428571 0.2142857 0.2857143 0.3571429

Почему и на каком этапе во время apply происходит транспонирование?


person Zhubarb    schedule 19.08.2013    source источник


Ответы (1)


Объединение результатов отдельных шагов применения несколько произвольно. На каком основании ваши ожидания отличались? Поведение, которое вы видите, описано в документации:

Если каждый вызов «FUN» возвращает вектор длины «n», то «apply» возвращает массив размерности «c(n, dim(X)[MARGIN])», если «n > 1».

Обратите внимание, что вы можете легко выполнить транспонирование впоследствии:

> t(applied)
          [,1]      [,2]      [,3]      [,4]
[1,] 0.1000000 0.2000000 0.3000000 0.4000000
[2,] 0.1428571 0.2142857 0.2857143 0.3571429
person Paul Hiemstra    schedule 19.08.2013
comment
+1, другим способом было бы вернуть список, а затем вызвать для него rbind. do.call(rbind, unlist(apply(data, 1, function(x) list(applyDirichletPrior(x))), rec=FALSE)) - person Arun; 19.08.2013
comment
Я ожидал, что функция изменит матрицу (2 * 4), применив указанную функцию к каждой строке, а затем выдаст результат с теми же размерами, что и ввод. Я понимаю, что применение не служит этой цели. - person Zhubarb; 19.08.2013