在嵌套函数中执行时找不到 VAR() 中的参数

问题描述 投票:0回答:1

我正在尝试在多个变量之间运行 VAR 模型,这就是为什么我编写了一个函数来准备数据并执行

vars::VAR()
函数,将结果提供给
vars::irf()
函数以生成一个 IRF 模型,我随后提取相关指标。这个函数有一个参数
max_lag
,我在其中定义了拟合模型时要考虑的最大滞后数。

因此我定义了这样一个函数:

library(vars)
data(EuStockMarkets)
f1 <- function(max_lag = 6){
  
  vars::irf(vars::VAR(EuStockMarkets, lag.max = max_lag))
  
}

然后调用函数:

f1(max_lag = 12)

导致

Error in VAR(y = ysampled, lag.max = max_lag) : 
  object 'max_lag' not found

请注意,无论是

f1()
还是分配新对象
m <- vars::VAR(EuStockMarkets, lag.max = max_lag)
然后将其作为输入提供给
irf()
函数,也不是预加载包都无法解决问题。

这似乎是

vars
包特有的问题,因为两者都是

f2 <- function(test = "test"){
  
  print(paste(test))
  
}

f2(test = "TEST")
[1] "TEST"

f3 <- function(col = "red"){
  
  ggplot(starwars, aes(x = height, y = mass)) +
    geom_point(color = col)
  
}

f3(col = "blue")

Output f3(col =

工作。

我也走出了我的舒适区,并尝试将

get('max_lag')
与参数
parent.frame()
environment()
parent.env(environment())
一起使用,或调用预定义的环境(也未找到),遵循this answer .

欢迎就具体修复和一般问题提出建议 - 我觉得这里的 R 环境有一些实质性的东西。

r variables nested environment
1个回答
0
投票

问题其实不是

VAR()
找不到
max_lag
,而是当你在
irf()
对象上调用
VAR()
时,值
max_lag
没有跟随,所以它实际上是
 irf()
找不到
max_lag
。您可以通过创建一组包含
lag.max=max_lag
的参数然后用
VAR()
调用
do.call()
来解决这个问题。这是一个例子:

library(vars)
data(EuStockMarkets)
  f1 <- function(max_lag = 6){
  args <- list(y=EuStockMarkets, 
               lag.max=max_lag)
  m <- do.call(vars::VAR, args)
  vars::irf(m)
}
res <- f1()
names(res$irf)
#> [1] "DAX"  "SMI"  "CAC"  "FTSE"

res$irf$DAX
#>            DAX      SMI      CAC     FTSE
#>  [1,] 32.05836 29.44197 19.20616 20.35056
#>  [2,] 31.60745 32.37784 19.13026 21.64319
#>  [3,] 30.63930 32.70562 18.66182 21.25947
#>  [4,] 29.73668 31.81143 17.25273 20.64492
#>  [5,] 28.81030 29.08016 15.49562 19.60930
#>  [6,] 26.72902 26.68544 13.52721 18.63569
#>  [7,] 26.30296 26.08855 13.49620 18.25619
#>  [8,] 25.95382 25.70311 13.40278 17.88850
#>  [9,] 25.74752 25.64168 13.36974 17.49341
#> [10,] 25.72072 25.92978 13.38728 17.23849
#> [11,] 25.67485 26.12543 13.41721 17.01522

创建于 2023-04-05 与 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.