【问题标题】:Results transposed with R apply [duplicate]用 R 转置的结果应用 [重复]
【发布时间】:2013-08-21 03:59:52
【问题描述】:

抱歉,我才发现这个问题已经回复here

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

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 期间的哪个阶段发生转置?

【问题讨论】:

标签: r apply transpose


【解决方案1】:

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

如果每次调用‘FUN’都返回一个长度为‘n’的向量,那么‘apply’ 如果“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

【讨论】:

  • +1,另一种方法是返回一个列表,然后在其上调用rbinddo.call(rbind, unlist(apply(data, 1, function(x) list(applyDirichletPrior(x))), rec=FALSE))
  • 我期待该函数通过在每一行应用指定的函数来修改 (2*4) 矩阵,然后生成与输入具有相同维度的输出。我了解 apply 不能用于此目的。
猜你喜欢
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2016-05-02
  • 2017-12-26
  • 2020-06-09
相关资源
最近更新 更多