如何以交替顺序使用R中的矢量化函数? [英] How can I use a vectorised function in R in alternate sequence?
本文介绍了如何以交替顺序使用R中的矢量化函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
n
元素的向量x
。我想对x
的每一个交替数使用任何向量化函数,例如cumprod
,即每隔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
只是一个示例函数。我可能还必须以交替顺序使用其他函数。
推荐答案
我们可以在创建一个matrix
(假设vector
为偶数长度)后,使用rowCumprods
以一种简洁的方式完成此操作)
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中的矢量化函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文