【问题标题】:Dynamic variable name R动态变量名 R
【发布时间】:2014-07-09 23:55:34
【问题描述】:

我已经阅读过关于assign 命令的类似问题。但这对我不起作用。

这是我的代码:

masums <- function(var) {
    lags <- var$p                    # number of lags in VAR
    eqn  <- length(var$varresult)    # number of equations in VAR
    dep  <- names(var$varresult)     # names of dependent variables

    for(i in 1:eqn) # compute coefficient matrices
        d <- dep[i]
        x <- paste("var$varresult$",d,"$coefficients",sep="")
        y <- as.matrix(GET THE VALUE OF "x" e.g. var$varresult$d$coefficients) # d="gap" for i=1
    }
    return(y)
}

示例:对于 i=1 d 将具有值“gap”,因此我想要 var$varresult$gap$coefficients 的值。

var$varresult 由“lm”类的元素组成。也许解决方案很简单,我只是强调看到它。 希望有人能帮忙。

编辑: 对于一个小的示例数据集:

library(vars)
y <- c(100*rnorm(100))
x <- seq(1,100,1)

vardata <- cbind(x,y)
var1    <- VAR(vardata,p=4,type="const")
var1$varresult$x$coefficients

马丁

【问题讨论】:

  • 您需要指定什么“不起作用”。我在这里看到了几个潜在的问题 - (1) 你在用 x 做什么? (2) 您只是从循环的最后一次迭代中返回 y - 但您还没有解释您实际上要做什么以及您当前努力的哪些方面没有奏效。
  • 我觉得有更好的方法来实现你所追求的。您能否为我们提供一个可重复的小示例和所需的输出?
  • 我每天都使用 R 6 年了,从未发现有必要使用 assign。可能有一种更像 R 的做事方式。你真正的问题是什么?
  • 是的,我只是在这个例子中提取了最后一个系数矩阵。当然,这不是我以后打算在这里做的。问题是我不能使用 var$varresult$d$coefficients ,其中 d 将是第一个 lm 对象的“间隙”。制作一个可重现的例子并不容易,因为我使用了一个非常大的 VAR 估计结果:/
  • 要明确的实际问题是,我怎样才能检索对象的值,如果我在其名称中使用变量...

标签: r variables var


【解决方案1】:

paste 在字符串中构造嵌套变量访问是完全错误的做法。

您缺少的是x$y 也可以写为x$['y'](或x$[['y']],这取决于您是想要列表中的单个值还是data.frame 中的列),以及这里'y' 是一个字符串。所以你可以这样写:

y <- as.matrix(var$varresult[[d]]$coefficients)

(假设var$varresult 是一个列表)

【讨论】:

    猜你喜欢
    • 2014-09-02
    • 2014-01-18
    • 1970-01-01
    • 2019-07-25
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    相关资源
    最近更新 更多