gpt4 book ai didi

r - R中的apply()与sweep()

转载 作者:行者123 更新时间:2023-12-01 06:11:55 24 4
gpt4 key购买 nike

我正在写笔记来比较 apply() 和 swing() 并发现以下奇怪的差异。为了生成相同的结果,sweep() 需要 MARGIN = 1,而 apply 需要 MARGIN = 2。此外,指定矩阵的参数在 apply() 中为大写 X,但在 swing() 中为小写。

my.matrix <- matrix(seq(1,9,1), nrow=3)
row.sums <- rowSums(my.matrix)
apply.matrix <- apply(X = my.matrix, MARGIN = 2, FUN = function (x) x/row.sums)
sweep.matrix <- sweep(x = my.matrix, MARGIN = 1, STATS = rowSums(my.matrix), FUN="/")
apply.matrix - sweep.matrix ##yup same matrix

sweep() 不是一个“应用类型”函数吗?这只是 R 的另一个怪癖还是我失去了理智?

最佳答案

请注意,对于apply

If each call to ‘FUN’ returns a vector of length ‘n’, then ‘apply’ returns an array of dimension ‘c(n, dim(X)[MARGIN])’ if ‘n > 1’

在您的示例中,在两种情况下,MARGIN 都可以(并且应该)设置为 1;但从 apply 返回的值应该被转置。这是最容易看出原始矩阵是否不是方阵的方法:

my.matrix <- matrix(seq(1,12,1), nrow=4)
apply.matrix <- t(apply(X = my.matrix, MARGIN = 1, FUN = function(x) x/sum(x)))
sweep.matrix <- sweep(x = my.matrix, MARGIN = 1, STATS = rowSums(my.matrix), FUN="/")
all.equal(apply.matrix, sweep.matrix)
# [1] TRUE

另请参阅 Can you implement 'sweep' using apply in R? 的回答,这说的是非常同样的事情。

关于r - R中的apply()与sweep(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39639585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com