关于zoo::rollapply的几个问题
我对关于zoo::rollapply的几个问题,r,rollapply,R,Rollapply,我对rollapply的width选项的理解是,它指定函数将在其上运行的窗口大小,而by选项指定此窗口的移位大小。这是我的数据集: > dataset <- as.vector(t(cbind(5:1, 1:5))) > dataset [1] 5 1 4 2 3 3 2 4 1 5 如何调试这些类型的*应用族函数错误 2) 在选项中使用大于1的向量的目的是什么?为什么下面的代码在奇数位置输出一个数字,但在奇数位置为w12变量指定两个数字 > w12 <- ro
rollapply
的width
选项的理解是,它指定函数将在其上运行的窗口大小,而by
选项指定此窗口的移位大小。这是我的数据集:
> dataset <- as.vector(t(cbind(5:1, 1:5)))
> dataset
[1] 5 1 4 2 3 3 2 4 1 5
如何调试这些类型的*应用
族函数错误
2) 在选项中使用大于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
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
>mtrx 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
#这没关系
>滚动应用(mtrx,宽度=2,比=2,乐趣=max,align=“left”,比.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
#但这是什么?
>滚动应用(mtrx,宽度=2,比=2,乐趣=max,align=“left”,比.column=F)
[1] 22 24 26 28 30
(1)很可能是一个bug
(2) 和(3)在帮助文件中进行了说明:
如果宽度是一个纯数字向量,则其元素被视为宽度
如果宽度是一个列表,则与对齐一起解释
其组件被视为偏移。在上述情况下,如果
宽度的长度为1,则每个点的宽度循环使用。如果
宽度是一个列表,其组件表示整数偏移,因此
列表的第i部分指位置i处的时间点+
宽度[[i]]。如果这些点中的任何一点小于1或大于
索引(数据)则不针对该点评估FUN,除非部分=
如果为TRUE,则只传递有效点
因此,对于第一个w12
,指定的c(1,2)
宽度被循环到dataset
的长度,以便备用应用程序的宽度为1和2
因此,第一个w12与下面相同,它使用宽度1,然后使用宽度2,然后再使用宽度1,以此类推
rollapply(dataset, c(1, 2, 1, 2, 1, 2, 1, 2, 1, 2), print)
如果为width
指定了列表,则其组件将被视为偏移而不是宽度。1表示下一个值,2表示下一个值之后的值,-1表示之前的值,依此类推
对于列表示例,它被循环到列表(1,2,1,2,1,2,1,2,1,2)
因此对于第一个应用程序,它使用下一个值,对于第二个应用程序,它使用下一个值之后的值,对于第三个应用程序,它再次使用下一个值,依此类推
(4) by.column
在帮助文件中定义:
by.column-逻辑。如果为TRUE,则会将FUN分别应用于每个列
默认值为TRUE,因此默认情况下,它应用于每一列,然后将结果绑定在一起。;否则,所有列将立即传递给函数。(1)可能是一个错误
(2) 和(3)在帮助文件中进行了说明:
如果宽度是一个纯数字向量,则其元素被视为宽度
如果宽度是一个列表,则与对齐一起解释
其组件被视为偏移。在上述情况下,如果
宽度的长度为1,则每个点的宽度循环使用。如果
宽度是一个列表,其组件表示整数偏移,因此
列表的第i部分指位置i处的时间点+
宽度[[i]]。如果这些点中的任何一点小于1或大于
索引(数据)则不针对该点评估FUN,除非部分=
如果为TRUE,则只传递有效点
因此,对于第一个w12
,指定的c(1,2)
宽度被循环到dataset
的长度,以便备用应用程序的宽度为1和2
因此,第一个w12与下面相同,它使用宽度1,然后使用宽度2,然后再使用宽度1,以此类推
rollapply(dataset, c(1, 2, 1, 2, 1, 2, 1, 2, 1, 2), print)
如果为width
指定了列表,则其组件将被视为偏移而不是宽度。1表示下一个值,2表示下一个值之后的值,-1表示之前的值,依此类推
对于列表示例,它被循环到列表(1,2,1,2,1,2,1,2,1,2)
因此对于第一个应用程序,它使用下一个值,对于第二个应用程序,它使用下一个值之后的值,对于第三个应用程序,它再次使用下一个值,依此类推
(4) by.column
在帮助文件中定义:
by.column-逻辑。如果为TRUE,则会将FUN分别应用于每个列
默认值为TRUE,因此默认情况下,它应用于每一列,然后将结果绑定在一起。;否则,所有列将立即传递给函数。1也在工作:
dataset <- as.vector(t(cbind(5:1, 1:5)))
rollapply(dataset, width = 1, by=1, FUN = max, align="left")
[1] 544343445也在工作:
dataset <- as.vector(t(cbind(5:1, 1:5)))
rollapply(dataset, width = 1, by=1, FUN = max, align="left")
[1] 5 4 4 3 3 4 5你应该试着将你的帖子限制在每个问题上,例如,因为我可以为你的一些问题提供一些提示,但不是所有的问题:1)不确定,但有趣的是,min的工作没有错误;2) 可变窗口;3) 不确定;4) ??; 5) 最后一个例子是给你一个窗口为2的行最大值,所以用最小值或中间值再试一次,看看是什么happens@rawr谢谢你的回复。你能试着进一步解释2,4(在更正前通常是5)作为答案吗?谢谢你。你应该试着把你的帖子限制在每个问题上,例如,因为我可以给你一些提示来回答你的一些问题,但不是所有的问题:1)不确定,但很有趣,min的作品没有错误;2) 可变窗口;3) 不确定;4) ??; 5) 最后一个例子是给你一个窗口为2的行最大值,所以用最小值或中间值再试一次,看看是什么happens@rawr谢谢你的回复。你能试试看吗
dataset <- as.vector(t(cbind(5:1, 1:5)))
rollapply(dataset, width = 1, by=1, FUN = max, align="left")
rollapply(dataset, width = 2, by=1, FUN = max, align="left")