【问题标题】:Process pairs of elements in a vector处理向量中的元素对
【发布时间】:2015-08-25 23:38:41
【问题描述】:

是否有任何标准函数可以应用于单个向量以每步处理两个元素?

例如,我们有向量:

> a <- c(8, 4, 5, 5, 7, 10)

我们要减去两个相邻元素:

> func(a, function (x1, x2) { x1-x2 })

[1] 4 -1 0 -2 -3

【问题讨论】:

  • 试试-diff(a),但有些东西告诉我你想要更通用的东西。

标签: arrays r iteration binary-operators


【解决方案1】:

一般来说,如果你想成对处理连续的向量元素,你可以得到每对中的第一个元素:

(first <- head(a, -1))
# [1] 8 4 5 5 7

你可以得到每对中的第二个元素

(second <- tail(a, -1))
# [1]  4  5  5  7 10

然后你可以对连续元素执行任何你想要的操作。例如,这是您的操作:

first-second
# [1]  4 -1  0 -2 -3

这是连续元素的乘积:

first*second
# [1] 32 20 25 35 70

请注意,您的操作实际上很常见,因此有一个专门的函数来获取连续元素的差异,diff

【讨论】:

  • @TarasShchybovyk 你应该能够快速计算firstsecond,即使对于大型向量也是如此。因此,效率将归结为您对它们的处理方式。像-* 这样的快速矢量化操作会很快,但慢速操作(比如涉及循环的操作)会很慢。注意-diff(a) 应该比head(a, -1) - tail(a, -1) 快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 2018-10-30
  • 1970-01-01
  • 2019-06-28
  • 2014-02-05
相关资源
最近更新 更多