【发布时间】:2023-03-14 09:52:01
【问题描述】:
我对@987654321@的width选项的理解是它指定了函数将在其上运行的窗口大小,by选项指定了这个窗口的移位大小。这是我的数据集:
> 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) 在with 选项中使用大于1 的向量的目的是什么?为什么下面的代码在奇数位置打印一个数字输出,但将奇数位置的两个数字分配给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
【问题讨论】:
-
您应该尝试将您的帖子限制为每个问题,例如,因为我可以为您的一些但不是所有问题提供一些提示:1)不确定,但有趣的是 min 没有错误; 2)可变窗口; 3) 不确定; 4)???; 5)最后一个例子是给你行最大值,窗口为 2,所以用最小值或中值再试一次,看看会发生什么
-
@rawr 谢谢你的回复。您能否尝试进一步解释 2,4(更正前为 5)作为答案?谢谢。