如何以交替顺序使用R中的矢量化函数? [英] How can I use a vectorised function in R in alternate sequence?

查看:15
本文介绍了如何以交替顺序使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆