【问题标题】:Write a loop for my function in r在 r 中为我的函数编写一个循环
【发布时间】:2017-06-06 21:12:52
【问题描述】:

我目前正在尝试为 30 个变量的滞后回归编写我的第一个循环。变量标记为 rx1, rx2.... rx3,数据帧称为 my_num_data。

我创建了一个如下所示的循环:

z <- zoo(my_num_data)

for (i in 1:30)
{dyn$lm(my_num_data$rx[i] ~ lag(my_num_data$rx[i], 1) 
        + lag(my_num_data$rx[i], 2))
}

但我收到一条错误消息:

model.frame.default 中的错误(公式 = dyn(my_num_data$rx[i] ~ lag(my_num_data$rx[i], : 变量“my_num_data$rx[i]”的类型无效(NULL)

谁能告诉我这个循环有什么问题?

谢谢!

【问题讨论】:

  • 您的循环正在读取[i] 作为变量“rx”的索引或行,该变量在 R 中通常排列为列。我认为您正在尝试使用[i] 来指示变量或列,例如rx1。循环通常用于迭代变量的索引或行,但看起来您正在尝试迭代变量。不要使用循环来迭代变量。使用它来遍历构成每个变量的值(行或索引)。

标签: r loops quantitative-finance


【解决方案1】:

这将生成一个列表L,其第 i 个组件具有z 的第 i 列的名称,其内容是z 的第 i 列在其前两个滞后上的回归。 Laglag 相同,只是参数 k 的符号相反。

library(dyn)
z <- zoo(anscombe) # test input using builtin data.frame anscombe

Lag <- function(x, k) lag(x, -k)
L <- lapply(as.list(z), function(x) dyn$lm(x ~ Lag(x, 1:2)))

【讨论】:

    【解决方案2】:

    第一个问题,我很确定您要查找的函数是 dynlm(),没有 $ 字符。其次,使用$rx[i] 不会连接rxi 的内容,它会选择$rx 中索引为i 的(单个)元素。试试这个...已编辑我没有你的数据,所以我无法在我的机器上测试它:

    results <- list()
    for (i in 1:30) {
      results[[i]] <- dynlm(my_num_data[,i] ~ lag(my_num_data[,i], 1) 
        + lag(my_num_data[,i], 2))
    }
    

    然后列表元素results[[1]] 将是第一次回归的结果,依此类推。

    请注意,这假定您的 my_num_data data.frame 仅包含 rx1rx2 等列。

    【讨论】:

    • 谢谢!!太棒了。
    • 只需 lapply 它,不需要 forlist()results &lt;- lapply(1:30, function(i) dynlm(my_num_data[,i] ~ lag(my_num_data[,i], 1) + lag(my_num_data[,i], 2)))
    • @Parfait 谢谢!知道有一种方法可以将其构建为 lapply 调用,但对如何构建它一无所知。很棒的提示,一直在学习...
    • 弹出另一个问题。我试图从一开始就运行整个代码,但我得到的结果与我只在 R 中运行这部分时不同。除了这部分之外,我的脚本没有任何变化。为什么会发生这种情况?
    • 嗯,这没有意义,除非您的my_num_data 发生了某种变化。
    【解决方案3】:

    我对 R 不是很熟悉,但您似乎正在尝试增加 rx 的索引。 rx 是具有不同索引值的向量吗? 如果不是解决方案,我将连接一个字符串

    for (i in 1:30){
    varName <-- "rx"+i
    dyn$lm(my_num_data$rx[i] ~ lag(my_num_data$rx[i], 1) 
            + lag(my_num_data$varName, 2))
    }
    

    再一次,我可能离这里很远,因为如果我的第一篇文章和 R 对我来说还是很新的话。

    【讨论】:

    • 您好 CRoberts,感谢您的帮助!我尝试运行代码,但收到另一条错误消息: -“rx”中的错误:一元运算符的无效参数
    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2018-09-09
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多