您好我有以下代码正常工作。
它计算两个时期之间的百分比差异。在第一个时期,函数返回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)
但是我无法理解这个想法。我认为这是因为两个论点的长度不同。
我有任何办法可以让它发挥作用。希望这很清楚。解释有点棘手。
答案 0 :(得分: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