gpt4 book ai didi

r - 矢量化 seq 的优雅方式?

转载 作者:行者123 更新时间:2023-12-04 16:31:44 26 4
gpt4 key购买 nike

尽管标题相似,但这与 Vectorizing rep and seq in R 不是同一个问题。 .

我的直接目标:给定一个向量,我想生成一个新向量,其中包含原始值加上旧值中每个值之间的规则间隔。这并不困难。

一种策略是使用更通用的函数,给定两个向量和指定的 by间隔,使用相同的 by 重复将 seq 应用于来自两个原始向量的成对数字值(value)。我还没有找到执行此操作的内置函数。 seq似乎抵制将向量作为参数处理。这是一个执行更一般操作的函数(然后我可以使用它来满足我的迫切需要):

multiseq <- function(froms, tos, by){
x <- c();
for (i in seq_along(froms)){
x <- c(x, seq(from=froms[i], to=tos[i], by=by))
}
x
}

例如:
> multiseq(1:2, 1.75:2.75, .25)
[1] 1.00 1.25 1.50 1.75 2.00 2.25 2.50 2.75

(这只是一个简单的例子。我真正想要的是用任意序列来做到这一点,例如
-0.89115386 -0.75346155 -0.61576924 -0.47807693 -0.34038463 -0.20269232 -0.06500001  0.07269230  0.21038460  0.34807691  0.48576922  0.62346153  0.76115383

我想将每个间隔分割为五个,以创建一个元素数量为 5 倍的新序列。)

只要序列不是太长,重复扩展一个向量应该不会太慢,我相信。如果我需要大序列,我可以重写以预先扩展向量并填充它。然而,用循环来做这件事仍然让我感到困扰。有没有更优雅的函数式编程 R-ly 方式?

谢谢。

最佳答案

在 R 中,向量化函数的最简单方法之一是使用 Vectorize功能。

基本上,您可以矢量化 from to参数并将所有启动器作为 from 中的向量给出争论并为 to 做同样的事情争论。

使用您的示例,您可以执行以下操作

seq2 <- Vectorize(seq.default, vectorize.args = c("from", "to"))

unlist(seq2(from = c(1, 1.75), to = c(2, 2.75), by = 0.25))

## [1] 1.00 1.25 1.50 1.75 2.00 1.75 2.00 2.25 2.50 2.75

关于r - 矢量化 seq 的优雅方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15917233/

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