gpt4 book ai didi

r - 您可以在 R 中使用 apply 实现 'sweep' 吗?

转载 作者:行者123 更新时间:2023-12-04 10:53:34 27 4
gpt4 key购买 nike

我正在复习我的 R 技能,终于感觉我已经掌握了 strange sweep function例如

df <- data.frame(a = 1:3, b = 2:4)
sweep(df, MARGIN = 2, STATS = c(5, 10), FUN = "*")

## a b
## 1 5 20
## 2 10 30
## 3 15 40

更有用 here ,在一个教程中,我正在努力在 R 中实现空间交互模型。

他们说你理解某事的标志是你可以用多种方式说出来,我认为这在编程中比几乎任何其他地方都更适用。然而,尽管 sweep解决看似 apply -esque,我不知道它们在某种程度上是否可以互换。

所以,为了提高我对 R 的理解,有没有办法使用 apply 来完成上述过程? ?

最佳答案

这很接近:

t(apply(df, 1, `*`, c(5,10)))

行名丢失,否则输出相同
> t(apply(df, 1, '*', c(5,10)))
a b
[1,] 5 20
[2,] 10 30
[3,] 15 40

为了打破这一点,假设我们是为 df 的第一行手动执行此操作的。 ,我们会写
> df[1, ] * c(5, 10)
a b
1 5 20

这与调用 '*'() 相同带参数的函数 df[1, ]c(5, 10)
> '*'(df[1, ], c(5, 10))
a b
1 5 20

由此,我们有足够的能力建立一个 apply()称呼:
  • 我们按行工作,因此 MARGIN = 1 ,
  • 我们应用函数'*'()所以FUN = '*'
  • 我们需要提供第二个参数 c(5,10) , 至 '*'() ,我们通过 ... apply() 的论点.

  • 唯一需要意识到的是 apply()将每次“迭代”产生的向量粘在一起;在这里,它们是按列绑定(bind)的,因此我们需要转置 apply() 的结果这样我们得到与 sweep() 相同的输出.

    关于r - 您可以在 R 中使用 apply 实现 'sweep' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20875426/

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