【问题标题】:How to pass unbalanced arguments to mapply如何将不平衡的参数传递给 mapply
【发布时间】:2015-07-07 09:19:04
【问题描述】:

您好,我的以下代码正在运行。

它计算两个时期之间的百分比差异。对于第一个周期,函数返回 NA,因为没有变化。

我想用mapply替换下面的代码并将两个参数传递给fn.pc。

ts <- c(12, 14, 15, 17, 12, 8, 13, 16, 20)
fn.pc <- function(i) {
if (i == 1) NA else (ts[i] - ts[i-1]) / ts[i-1] 
}
sapply(seq_along(tsVector), fn.pc)

例如,上面的函数签名将被替换为:

fn.pc <- function(i, ts) {...

然后这个函数会被 mapply 调用,使用类似下面的代码:

mapply(fn.pc, seq_along(ts.vector), ts.vector)

但我无法让这个想法发挥作用。我认为这是因为两个参数的长度不同。

我有任何方法可以让它工作。希望这很清楚。有点难以解释。

【问题讨论】:

  • 为什么要实现?你不需要那里 mapply ... sapply 就足够了。
  • sapply() 确实适用于上面发布的示例。但是当我有许多不同的时间序列时呢? ts1
  • 我更新了我的答案。

标签: r mapply


【解决方案1】:

假设你有一个向量列表lst。你可以这样继续:

lapply(lst, function(x) sapply(seq_along(x), function(u) diff(x,u)))

只需使用diff 即可:

x = c(12,34,23,11,34,45,12,11)

> diff(x,2)
[1]  11 -23  11  34 -22 -34
> diff(x,3)
[1]  -1   0  22   1 -23
> diff(x,4)
[1]  22  11 -11   0
> diff(x,5)
[1]  33 -22 -12

【讨论】:

  • 很好。谢谢!你说得对,我可能会这样做......但我想让这个概念与 mapply() 一起工作,这对于更复杂的事情会很有用,而不仅仅是计算百分比。
  • 非常感谢。将审查。在新西兰迟到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 2020-10-09
  • 2012-12-21
  • 2012-01-07
相关资源
最近更新 更多