我正在研究R(版本3.4.1)中的一些时间序列的东西,并且想从我运行的回归中提取系数,以便进行进一步的分析。
到目前为止,所有结果都保存为uGARCHfit对象,这些对象基本上是复杂的列表对象,我想从中以下列方式提取系数。
我想要的只是这个:
for(i in list){
i_GARCH_mxreg <- i_GARCH@fit$robust.matcoef[5,1]
}
“list”是一个列表对象,其中每个元素都是一个观察的名称。现在,我希望我的循环创建一个名为我在循环中指定的新数字对象。
现在这显然不起作用,因为索引“i”没有像我希望的那样被替换。
如何正确地重写我的循环?
最小的工作示例:
list <- as.list(c("one", "two", "three"))
one_a <- 1
two_a <- 2
three_a <- 3
for (i in list){
i_b <- i_a
}
这应该给我的是:
> one_b
[1] 1
> two_b
[1] 2
> three_b
[1] 3
澄清:
我想从多个列表对象中提取系数。这些以'string'_obj的方式命名。问题是我没有提取这些系数的函数,列表“不是子集”,所以我必须通过obj@fit$robust.matcoef[5,1]
调用单个对象(或者有另一种方法吗?)。我想使用循环来获取我的字符串列表,并在每次迭代中,取一个字符串,添加'string'_obj@fit$robust.matcoef[5,1]
,并将此值保存到一个对象中,再次命名为“'string'_name”
将此列入列表而不是单个对象可能更容易,因为有人建议使用lapply,但这不是我现在主要关注的问题。
可能有一种简单的方法可以做到这一点,但我无法找到它。对不起任何困惑,感谢您的帮助。
答案 0 :(得分:1)
以下内容应符合您所需的输出:
# your list
l <- as.list(c("one", "two", "three"))
one_a <- 1
two_a <- 2
three_a <- 3
# my workspace: note that there is no one_b, two_b, three_b
ls()
[1] "l" "one_a" "three_a" "two_a"
for (i in l){
# first, let's define the names as characters, using paste:
dest <- paste0(i, "_b")
orig <- paste0(i, "_a")
# then let's assign the values. Since we are working with
# characters, the functions assign and get come in handy:
assign(dest, get(orig) )
}
# now let's check my workspace again. Note one_b, two_b, three_b
ls()
[1] "dest" "i" "l" "one_a" "one_b" "orig" "three_a"
[8] "three_b" "two_a" "two_b"
# let's check that the values are correct:
one_b
[1] 1
two_b
[1] 2
three_b
[1] 3
对所使用的函数发表评论:assign
将一个字符作为第一个参数,它应该是新创建的对象的名称。第二个参数是该对象的值。 get
接受一个字符,并在工作区中查找与该字符同名的对象值。例如,get("one_a")
将产生1.
另外,只是为了跟进我之前的评论:如果我们已经在列表中包含了所有系数,我们可以执行以下操作:
# hypothetical coefficients stored in list:
lcoefs <- list(1,2,3)
# let's name the coefficients:
lcoefs <- setNames(lcoefs, paste0(c("one", "two", "three"), "_c"))
# push them into the global environment:
list2env(lcoefs, env = .GlobalEnv)
# look at environment:
ls()
[1] "dest" "i" "l" "lcoefs" "one_a" "one_b" "one_c"
[8] "orig" "three_a" "three_b" "three_c" "two_a" "two_b" "two_c"
one_c
[1] 1
two_c
[1] 2
three_c
[1] 3
为了解决这些评论,这里有一个更为现实的例子,考虑到list
- 结构:
l <- as.list(c("one", "two", "three"))
# let's "hide" the values in a list:
one_a <- list(val = 1)
two_a <- list(val = 2)
three_a <- list(val = 3)
for (i in l){
dest <- paste0(i, "_b")
orig <- paste0(i, "_a")
# let's get the list-object:
tmp <- get(orig)
# extract value:
val <- tmp$val
assign(dest, val )
}
one_b
[1] 1
two_b
[1] 2
three_b
[1] 3