当列表项未命名时,如何在R中调用变量?

当列表项未命名时,如何在R中调用变量?,r,R,我试图从以下结果中提取值10.02798(模式1预测),但我尝试的p$的所有变化均无效。我正在使用R中的arfima包中的predict函数 >library(arfima) >set.seed(82365) >sim <- arfima.sim(1000, model = list(dfrac = 0.4, theta=0.9, dint = 1)) >fit <- arfima(sim, order = c(0, 1, 1)) >p<- pre

我试图从以下结果中提取值10.02798(模式1预测),但我尝试的
p$
的所有变化均无效。我正在使用R中的
arfima
包中的
predict
函数

>library(arfima)
>set.seed(82365)
>sim <- arfima.sim(1000, model = list(dfrac = 0.4, theta=0.9, dint = 1))
>fit <- arfima(sim, order = c(0, 1, 1))
>p<- predict(fit, n.ahead = 5)
> p
$`Mode 1`
$`Mode 1`$`Forecasts and SDs`
                   1        2        3        4        5
Forecasts   10.02798 10.05937 10.08246 10.10474 10.12719
Exact SD     1.03035  1.14641  1.22365  1.28863  1.34813
Limiting SD  1.03028  1.14627  1.22343  1.28834  1.34774
>库(arfima)
>种子集(82365)
>sim-fit p
$`模式1`
$`模式1`$`预测和SDs`
1        2        3        4        5
预测10.02798 10.05937 10.08246 10.10474 10.12719
精确标准偏差1.03035 1.14641 1.22365 1.28863 1.34813
极限SD 1.03028 1.14627 1.22343 1.28834 1.34774

当列表项未命名时,您可以使用双括号语法通过列表中的索引引用它们。例如,第一个项目有索引1,因此您可以像
list[[1]]
那样提取此元素


在您的例子中,对象
p
是一个列表,其第一项是一个未命名的列表,其中包含问题中所示的表格。您可以按如下方式提取预测:

p[[1]]$Forecast
这个向量的第一个元素是10.02798,这就是你想要的。所以你可以

p[[1]]$Forecast[1]
无论出于何种原因,
p
中的前两个列表项没有命名,因此需要使用双括号语法来获取
p
中的第一个项。但是该项中的列表项是命名的,因此您可以使用
$
语法对这些项进行命名

如果希望与提取语法保持一致,可以改为

p[[1]][["Forecast"]][1]
甚至

p[[1]][[1]][1]
不过我认为
p[[1]]$Forecast[1]
还可以


通常,要查看对象的结构,可以使用
str()
函数。在这种情况下:

str(p)
#List of 9
# $         :List of 9
#  ..$ Forecast : num [1:5] 10 10.1 10.1 10.1 10.1
#  ..$ exactVar : num [1:5] 1.06 1.31 1.5 1.66 1.82
#  ..$ exactSD  : num [1:5] 1.03 1.15 1.22 1.29 1.35
#  ..$ uppernp  : num [1:5] 12 12.2 12.4 12.7 12.9
#  ..$ lowernp  : num [1:5] 7.59 7.33 7 7.03 6.73
#  ..$ meanvalnp: num [1:5] 9.86 9.83 9.88 9.82 9.83
#  ..$ limitVar : num [1:5] 1.06 1.31 1.5 1.66 1.82
#  ..$ limitSD  : num [1:5] 1.03 1.15 1.22 1.29 1.35
#  ..$ sigma2   : num 1.06
# $         :List of 9
#  ..$ Forecast : num [1:5] 10 10.1 10.1 10.1 10.1
#  ..$ exactVar : num [1:5] 1.07 1.43 1.7 1.93 2.14
#  ..$ exactSD  : num [1:5] 1.04 1.2 1.3 1.39 1.46
#  ..$ uppernp  : num [1:5] 12 14.2 15.7 17.7 20.2
#  ..$ lowernp  : num [1:5] 5.96 4.02 1.89 -0.29 -2.69
#  ..$ meanvalnp: num [1:5] 9.03 9.04 9.01 8.91 8.97
#  ..$ limitVar : num [1:5] 1.07 1.43 1.7 1.93 2.14
#  ..$ limitSD  : num [1:5] 1.04 1.2 1.3 1.39 1.46
#  ..$ sigma2   : num 1.07
# $ z       : Time-Series [1:1000] from 1 to 1000: -0.829 0.1149 1.261 -0.0427 0.1901 ...
# $ seed    : logi NA
# $ limiting: logi TRUE
# $ bootpred: logi TRUE
# $ B       : num 1000
# $ predint : num 0.95
# $ name    : chr "fit"
# - attr(*, "class")= chr "predarfima"

这表明
p
是一个包含9项的列表,其中第一项本身就是一个包含9项的列表,并且没有名称。这有一个名为“代码>预测/代码>的项目,它是你想要的向量。

看起来你应该能够做<代码> P$ 1模式'$'预测和SDS '[ 1,] 。虽然您所拥有的是有帮助的,但如果您可以提供一些示例数据和传递给
predict
@AlexA的模型定义,则会更有帮助。谢谢你的建议。我编辑了这个问题,现在可以复制,但你的建议仍然为空,因为
p
中的第一项实际上没有名称。(您可以使用
names(p)
检查这一点)这就是
$
语法失败的原因。我发布了一个答案,应该能满足你的需要。很高兴我能帮你。我在答案的顶部添加了一行,直接指向标题(但我保留了所有其他内容)。