gpt4 book ai didi

r - 如何以交替顺序在 R 中使用矢量化函数?

转载 作者:行者123 更新时间:2023-12-04 10:19:33 31 4
gpt4 key购买 nike

假设我有一个向量 xn元素。我想使用任何矢量化函数,比如 cumprod , 在 x 的每个备用号码上, 即每 1, 3, 5 等等,然后是 2, 4, 6 等等。我正在添加一个 reprex 并尝试了代码。该代码有效,但似乎我不必要地走了很长的路,并且可以缩短代码。是真的吗?

x <- 5:14

cumprod((x * (seq_along(x) %% 2)) + (seq_along(x)-1) %% 2) * seq_along(x) %% 2 +
cumprod((x * ((seq_along(x)-1) %% 2)) + seq_along(x) %% 2) * (seq_along(x)-1) %% 2
#> [1] 5 6 35 48 315 480 3465 5760 45045 80640
这里 cumprod只是一个示例函数。我可能还必须以交替顺序使用其他功能。

最佳答案

我们可以通过 rowCumprods 以简洁的方式做到这一点。创建 matrix 后(假设 vector 是偶数长度)

library(matrixStats)
c(rowCumprods(matrix(x, nrow = 2)))
-输出
[1]     5     6    35    48   315   480  3465  5760 45045 80640

如果它可以是奇数长度,那么只需附加一个 NA在末尾
 c(rowCumprods(matrix(c(x,  list(NULL, NA)[[1 +
(length(x) %%2 != 0)]]), nrow = 2)))
-输出
 [1]     5     6    35    48   315   480  3465  5760 45045 80640

或者我们可以使用 ave 以通用方式执行此操作(适用于偶数/奇数长度)
ave(x, seq_along(x) %% 2, FUN = cumprod)
[1] 5 6 35 48 315 480 3465 5760 45045 80640

关于r - 如何以交替顺序在 R 中使用矢量化函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68564367/

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