如何输入rollapplyr FUN中使用的函数的参数

如何输入rollapplyr FUN中使用的函数的参数,r,rollapply,R,Rollapply,假设我有以下数据: input <- data.frame(id=rep(c('A', 'B'), c(10, 10)),year=rep(1:10, 2), y=c(rnorm(10), rnorm(10)),x1 = c(rnorm(10),rnorm(10))) 我试图通过在上面的代码中定义input、indepvar和depvar来提供beta函数的参数。但我得到了这个错误: FUN中的错误(数据[posns,],…):未使用的参数(数据[po

假设我有以下数据:

input <- data.frame(id=rep(c('A', 'B'), c(10, 10)),year=rep(1:10, 2),
                  y=c(rnorm(10), rnorm(10)),x1 = c(rnorm(10),rnorm(10)))
我试图通过在上面的代码中定义input、indepvar和depvar来提供beta函数的参数。但我得到了这个错误:

FUN中的错误(数据[posns,],…):未使用的参数(数据[posns,])


这里有一个问题:但我不明白我没有使用什么论据。在我的上下文中,这个错误意味着什么?为什么我会得到它?

我认为这里有一些问题。让我带你看一下最关键的问题:

# Simple Regression
beta <- function(x, indepvar, depvar) {
  a <- coef(lm(formula = indepvar ~ depvar, data = x))
  return(a)
}
eval(expr、envir、enclose)中出错:找不到对象“y”

这是因为
y
x1
输入之外不存在。您的
rollappyr
也存在同样的问题。解决这个问题的一种方法是写:

beta <- function(indepvar, depvar) {
  a <- coef(lm(indepvar ~ depvar))
  return(a)
}
现在,这项工作:

rollapplyr(input[3:4], width = 6,
           FUN = function(x) beta(x[,1], x[,2]),
           by.column = FALSE)

#      (Intercept)        depvar
# [1,] -0.04987909  0.6433585022
# [2,] -0.23739671  0.7527017129
# [3,] -0.40483456  0.5833452315
# [4,] -0.28191172  0.6660916836
# [5,]  0.02886934  0.5334114615
# [6,]  0.17284232  0.8126499211
# [7,]  0.01236415  0.3194661428
# [8,]  0.48156300 -0.1532216150
# [9,]  0.75965765 -0.1993015431
# [10,]  0.80509109 -0.1822009137
# [11,]  0.55055694 -0.0005880675
# [12,]  0.53963291 -0.0262970723
# [13,]  0.46509011  0.0570725348
# [14,]  0.33227459  0.1598345855
# [15,] -0.20316429  0.2757045612
如果希望能够按名称调用列,可以将
beta
函数编写为:

library(zoo)
beta <- function(x, indepvar, depvar) {
  a <- coef(lm(as.formula(paste(indepvar, "~", depvar)), 
               data = x))
  return(a)
}

rollapplyr(input[3:4], width = 6,
           FUN = function(x) beta(as.data.frame(x), "y", "x1"),
           by.column = FALSE)

#      (Intercept)            x1
# [1,] -0.04987909  0.6433585022
# [2,] -0.23739671  0.7527017129
# [3,] -0.40483456  0.5833452315
# [4,] -0.28191172  0.6660916836
# [5,]  0.02886934  0.5334114615
# [6,]  0.17284232  0.8126499211
# [7,]  0.01236415  0.3194661428
# [8,]  0.48156300 -0.1532216150
# [9,]  0.75965765 -0.1993015431
# [10,]  0.80509109 -0.1822009137
# [11,]  0.55055694 -0.0005880675
# [12,]  0.53963291 -0.0262970723
# [13,]  0.46509011  0.0570725348
# [14,]  0.33227459  0.1598345855
# [15,] -0.20316429  0.2757045612
图书馆(动物园)

你能解释一下你想用
rollappyr
做什么,以及它来自哪个软件包吗?我以前从未见过这个函数。@用户rollapply函数来自zoo软件包。我想做的是在windows中以滚动的方式运行我的回归,这里的宽度为6(举个例子)。那么期望的结果是什么?@useR让我解释一下上面的输入数据。你们可以看到,对于两个不同的ID(A和B),我有10年的y和x1。我想运行滚动窗口回归并保存测试版。例如,第一个regersion是从year=1到year=7。然后下一个回归是从第2年到第8年。之后从第3年到第9年。你可以看到。(我的下一步是分组进行,但我想在这里一步一步地进行,顺便说一句,我被困在了第一步。非常感谢,@useR。新代码对我很有用。我想我应该花更多的时间让R变得更容易使用。
beta <- function(indepvar, depvar) {
  a <- coef(lm(indepvar ~ depvar))
  return(a)
}
# > beta(input[,3],input[,4])
# (Intercept)      depvar 
#   0.1308993   0.2373399
rollapplyr(input[3:4], width = 6,
           FUN = function(x) beta(x[,1], x[,2]),
           by.column = FALSE)

#      (Intercept)        depvar
# [1,] -0.04987909  0.6433585022
# [2,] -0.23739671  0.7527017129
# [3,] -0.40483456  0.5833452315
# [4,] -0.28191172  0.6660916836
# [5,]  0.02886934  0.5334114615
# [6,]  0.17284232  0.8126499211
# [7,]  0.01236415  0.3194661428
# [8,]  0.48156300 -0.1532216150
# [9,]  0.75965765 -0.1993015431
# [10,]  0.80509109 -0.1822009137
# [11,]  0.55055694 -0.0005880675
# [12,]  0.53963291 -0.0262970723
# [13,]  0.46509011  0.0570725348
# [14,]  0.33227459  0.1598345855
# [15,] -0.20316429  0.2757045612
library(zoo)
beta <- function(x, indepvar, depvar) {
  a <- coef(lm(as.formula(paste(indepvar, "~", depvar)), 
               data = x))
  return(a)
}

rollapplyr(input[3:4], width = 6,
           FUN = function(x) beta(as.data.frame(x), "y", "x1"),
           by.column = FALSE)

#      (Intercept)            x1
# [1,] -0.04987909  0.6433585022
# [2,] -0.23739671  0.7527017129
# [3,] -0.40483456  0.5833452315
# [4,] -0.28191172  0.6660916836
# [5,]  0.02886934  0.5334114615
# [6,]  0.17284232  0.8126499211
# [7,]  0.01236415  0.3194661428
# [8,]  0.48156300 -0.1532216150
# [9,]  0.75965765 -0.1993015431
# [10,]  0.80509109 -0.1822009137
# [11,]  0.55055694 -0.0005880675
# [12,]  0.53963291 -0.0262970723
# [13,]  0.46509011  0.0570725348
# [14,]  0.33227459  0.1598345855
# [15,] -0.20316429  0.2757045612