当列表项未命名时,如何在R中调用变量?
我试图从以下结果中提取值10.02798(模式1预测),但我尝试的当列表项未命名时,如何在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
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)
检查这一点)这就是$
语法失败的原因。我发布了一个答案,应该能满足你的需要。很高兴我能帮你。我在答案的顶部添加了一行,直接指向标题(但我保留了所有其他内容)。