我对rollapply
's width
option 的理解是它指定了函数将在其上运行的窗口大小,而by
options 指定了这个窗口的移位大小。这是我的数据集:
> dataset <- as.vector(t(cbind(5:1, 1:5)))
> dataset
[1] 5 1 4 2 3 3 2 4 1 5
以下是证实我在上面写过的示例:
> w3b3 <- rollapply(dataset, width = 3, by=3, FUN = print, align="left")
[1] 5 1 4
[1] 2 3 3
[1] 2 4 1
> w3b2 <- rollapply(dataset, width = 3, by=2, FUN = print, align="left")
[1] 5 1 4
[1] 4 2 3
[1] 3 3 2
[1] 2 4 1
> w2b3 <- rollapply(dataset, width = 2, by=3, FUN = print, align="left")
[1] 5 1
[1] 2 3
[1] 2 4
> w3b1 <- rollapply(dataset, width = 3, by=1, FUN = print, align="left")
[1] 5 1 4
[1] 1 4 2
[1] 4 2 3
[1] 2 3 3
[1] 3 3 2
[1] 3 2 4
[1] 2 4 1
[1] 4 1 5
# ACCORDING OT MAN WHEN NO VALUE IS USED THEN by=1 (SAME AS ABOVE)
> w3b1 <- rollapply(dataset, width = 3, FUN = print, align="left")
[1] 5 1 4
[1] 1 4 2
[1] 4 2 3
[1] 2 3 3
[1] 3 3 2
[1] 3 2 4
[1] 2 4 1
[1] 4 1 5
> w1b1 <- rollapply(dataset, width = 1, by=1, FUN = print, align="left")
[1] 5
[1] 1
[1] 4
[1] 2
[1] 3
[1] 3
[1] 2
[1] 4
[1] 1
[1] 5
尽管如此,我有几个问题:
1)为什么这个在工作时返回错误max(20)
?一切都与上一个示例相同,除了print
替换为max
:
> w1b1 <- rollapply(dataset, width = 1, by=1, FUN = max, align="left")
Error in if (is.na(a) || is.na(rval[i = 1]) || a == rval[i - 1]) max(xc[(i - :
missing value where TRUE/FALSE needed
如何调试这些类型*apply
族函数错误?
2) 在选项中使用大于 1 的向量的目的是什么?with
为什么下面的代码在奇数位置打印一个数字输出,但将奇数位置的两个数字分配给w12
变量?
> w12 <- rollapply(dataset, width = c(1,2), FUN = print, align="left")
[1] 5
[1] 1 4
[1] 4
[1] 2 3
[1] 3
[1] 3 2
[1] 2
[1] 4 1
[1] 1
> w12
[,1] [,2]
[1,] 5 5
[2,] 1 4
[3,] 4 4
[4,] 2 3
[5,] 3 3
[6,] 3 2
[7,] 2 2
[8,] 4 1
[9,] 1 1
# SAME AS ABOVE (ACCORDING TO MAN by IS USED ONLY IF width IS OF LENGTH 1)
> w12 <- rollapply(dataset, width = c(1,2), by=10, FUN = print, align="left")
[1] 5
[1] 1 4
[1] 4
[1] 2 3
[1] 3
[1] 3 2
[1] 2
[1] 4 1
[1] 1
> w12
[,1] [,2]
[1,] 5 5
[2,] 1 4
[3,] 4 4
[4,] 2 3
[5,] 3 3
[6,] 3 2
[7,] 2 2
[8,] 4 1
[9,] 1 1
3)将向量和列表传递给参数有什么区别width
(与以前的输出相比,这是完全不同的)?
> rollapply(dataset, width = list(1,2), FUN = print, align="left")
[1] 1
[1] 2
[1] 2
[1] 3
[1] 3
[1] 4
[1] 4
[1] 5
[1] 5
[1] 1 2 2 3 3 4 4 5 5
4)做by.column
什么?我期待它与矩阵有关,所以我尝试了以下操作:
> mtrx <- matrix(c(1:30), nrow=10)
> mtrx
[,1] [,2] [,3]
[1,] 1 11 21
[2,] 2 12 22
[3,] 3 13 23
[4,] 4 14 24
[5,] 5 15 25
[6,] 6 16 26
[7,] 7 17 27
[8,] 8 18 28
[9,] 9 19 29
[10,] 10 20 30
# THIS IS OK
> rollapply(mtrx, width = 2, by = 2, FUN = max, align = "left", by.column=T)
[,1] [,2] [,3]
[1,] 2 12 22
[2,] 4 14 24
[3,] 6 16 26
[4,] 8 18 28
[5,] 10 20 30
# BUT WHAT IS THIS?
> rollapply(mtrx, width = 2, by = 2, FUN = max, align = "left", by.column=F)
[1] 22 24 26 28 30