【发布时间】:2021-07-28 16:47:14
【问题描述】:
假设我有一个带有n 元素的向量x。我想在 x 的每个交替数字上使用任何矢量化函数,比如 cumprod,即每 1、3、5 等,然后在 2、4、6 等上使用另一个。我正在添加一个代表并尝试了代码。该代码有效,但似乎我不必要地走了很长的路,并且可以缩短代码。可以吗?
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 只是一个示例函数。我可能还必须以交替顺序使用其他功能。
【问题讨论】:
-
如果 base R 有一个相当于 Clojure 中的 take-nth 的函数,那就太棒了。
-
@BillO'Brien 我不熟悉 Clojure,但是
y <- x[seq(1,n,by=2)]怎么样?这基本上是 thelatemail 的回答 -
昨天没有。下面的所有答案都令人惊叹。另一种方法是
Reduce(function(x, y) c(x, y*tail(x, 2)[1]), x, init = 1)[-1]这意味着您可以随时将 2 更改为任何数字。即 3、4 等