diff
はS3ジェネリックで実装するのがかなり簡単なので、自分でdiff.bigz
メソッドを追加することができます。ここでlag = 1
、differences = 1
のデフォルトの場合のための非常に基本的な例です。
library(gmp)
z <- as.bigz(
c("1000000000000000000000000000",
"1000000000000000000000000010",
"1000000000000000000000000021",
"1000000000000000000000000033",
"1000000000000000000000000047")
)
diff.bigz <- function(x) {
x[-1] - x[-length(x)]
}
diff(z)
#Big Integer ('bigz') object of length 4:
#[1] 10 11 12 14
あなたはより精巧な何かをしたい場合は、diff.default
を翻訳することはあまりにも難しいことではありません。
diff.default
# function (x, lag = 1L, differences = 1L, ...)
# {
# ismat <- is.matrix(x)
# xlen <- if (ismat)
# dim(x)[1L]
# else length(x)
# if (length(lag) != 1L || length(differences) > 1L || lag <
# 1L || differences < 1L)
# stop("'lag' and 'differences' must be integers >= 1")
# if (lag * differences >= xlen)
# return(x[0L])
# r <- unclass(x)
# i1 <- -seq_len(lag)
# if (ismat)
# for (i in seq_len(differences)) r <- r[i1, , drop = FALSE] -
# r[-nrow(r):-(nrow(r) - lag + 1L), , drop = FALSE]
# else for (i in seq_len(differences)) r <- r[i1] - r[-length(r):-(length(r) -
# lag + 1L)]
# class(r) <- oldClass(x)
# r
# }
# <bytecode: 0x62f5c78>
# <environment: namespace:base>