关于zoo :: rollapply的几个问题

时间:2016-03-21 21:06:39

标签: r rollapply

我对if (request.RequestUri.AbsolutePath.Contains("swagger")) { return response; } rollapply选项的理解是它指定了函数运行的窗口大小,width选项指定了此窗口的移位大小。这是我的数据集:

by

这里有一些例子证实我已经写过:

> dataset <- as.vector(t(cbind(5:1, 1:5)))
> dataset
 [1] 5 1 4 2 3 3 2 4 1 5

尽管我有几个问题:

1)为什么在> 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 工作时这个会返回错误?除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 家庭功能错误?

2)在*apply选项中使用大于1的向量的目的是什么?为什么后面的代码打印一个数字以在奇数位置输出但是在奇数位置将两个数字分配给with变量?

w12

3)将向量和列表传递给> 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 参数有什么区别(与之前的输出相比,这是完全不同的)?

width

4)> 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 做了什么?我期待它与矩阵有关,所以我尝试过:

by.column

2 个答案:

答案 0 :(得分:0)

(1)可能是一个错误。

(2)和(3)在帮助文件中解释:

  

如果width是普通数字向量,则其元素被视为宽度   与align一起解释,而if width是一个列表   其组件被视为抵消。在上述情况下如果   宽度的长度是1,然后宽度被循环每个第s点。如果   width是一个列表,其组件表示整数偏移量   列表的第i个分量指的是位置i +的时间点   宽度[[I]]。如果这些点中的任何一个低于1或高于   index(data)然后不计算该点的FUN,除非partial =   是的,在这种情况下只传递有效点。

因此,对于第一个w12c(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表示先前值,依此类推。

对于列表示例,它被循环到list(1, 2, 1, 2, 1, 2, 1, 2, 1, 2),因此对于第一个应用程序,它使用下一个值,对于第二个应用程序,它使用下一个值之后的值,对于第三个应用程序,它使用下一个值等等。

(4)by.column在帮助文件中定义:

  

by.column - 逻辑。如果为TRUE,则FUN分别应用于每列。

默认值为TRUE,因此默认情况下rollapply将应用于每列,然后将结果合并到一起。否则所有列都会立即传递给函数。

答案 1 :(得分:0)

1也在运作:

dataset <- as.vector(t(cbind(5:1, 1:5)))
rollapply(dataset, width = 1, by=1, FUN = max, align="left")

[1] 5 1 4 2 3 3 2 4 1 5

宽度为2

rollapply(dataset, width = 2, by=1, FUN = max, align="left")

[1] 5 4 4 3 3 3 4 4 5