1

嗨,我有以下代码工作。

它计算两个期间之间的百分比差异。对于第一个周期,函数返回 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)

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

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

4

1 回答 1

1

假设您有一个 vector 列表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
于 2015-07-07T09:33:46.887 回答