3

抱歉,我刚刚意识到这已经在这里得到了回答。

这应该是非常基本的,但我真的不明白为什么会这样。有人可以帮忙吗?这是带有示例“数据”的简单代码:

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发生转置?

4

1 回答 1

8

组合各个应用步骤的结果有些武断。您的期望有何不同?您看到的行为是文档描述它的方式:

如果每次调用“FUN”都返回一个长度为“n”的向量,那么如果“n > 1”,则“应用”返回一个维度为“c(n, dim(X)[MARGIN])”的数组。

请注意,之后您可以轻松地执行转置:

> t(applied)
          [,1]      [,2]      [,3]      [,4]
[1,] 0.1000000 0.2000000 0.3000000 0.4000000
[2,] 0.1428571 0.2142857 0.2857143 0.3571429
于 2013-08-19T11:20:13.217 回答