【问题标题】:Get access to the elements of a list in R [closed]访问R中列表的元素[关闭]
【发布时间】:2014-09-24 00:44:09
【问题描述】:

我想从 R 中的预测函数返回的列表中获取一些特定元素。

我的数据是这样的

Point     Forecast       Lo 80     Hi 80        Lo 95     Hi 95
111       69894.82  62433.7449  77355.89   58484.0929  81305.54
112       69894.82  60130.1979  79659.43   54961.1218  84828.51
113       69894.82  58274.6632  81514.97   52123.3264  87666.30
114       69894.82  56677.0955  83112.53   49680.0575  90109.57
115       69894.82  55252.8108  84536.82   47501.8019  92287.83

我想获取“预测”列中的数字。

我使用以下代码来创建我的数据:

myts is some time series data
fit <- auto.arima(myts)
res <- forecast(fit, 677)

我的数据名称是 res,它是 10 个列表。 dput(res)的结果如下:

-2443.82541262374, -3956.5563302119, 1335.8788362195, 3804.02514978909, 
-1364.6312311184, -360.502517865796, -286.138018093465, -2804.55786143203, 
-1201.73015351274, -1085.1353062962, 8688.02102637354, -5767.08772503892, 
7292.94004476998, -2310.33192585826, -1329.76851485969, -4561.07364095336, 
2552.742451461, 3299.51706250617, 2447.80597742078, 15969.1761900118, 
-12064.25481109, -4186.66470081449, -6343.95400053521, 3822.10952263371
), .Tsp = c(1, 110, 1), class = "ts")), .Names = c("method", 
"model", "level", "mean", "lower", "upper", "x", "xname", "fitted", 
"residuals"), class = "forecast")

【问题讨论】:

  • 独特(数据框$Forecast)
  • @CnrL 您好,感谢您的快速回复。但是,我的数据实际上是一个列表而不是数据框。我的列表名称是 res。我试过 res$Forecast 还是不行。
  • 你真的应该分享str(res)的输出。所以你有一个包含单个 data.frame 的列表?因为您发布的内容确实看起来像 data.frame
  • 那么请给我们看一个列表示例
  • 请提供dput(res)

标签: r list forecasting


【解决方案1】:
as.numeric(res$mean)

会做的。

根据您的评论,Forecast 是实际预测,并不总是平均值。

考虑以下使用来自here 的数据集的示例

library(forecast)
births <- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat")
birthstimeseries <- ts(births, frequency=12, start=c(1946,1))
fit <- auto.arima(birthstimeseries)
res <- forecast(fit, 12)
plot(res)

从图中可以看出,预测不仅仅是平均值,auto.arima 拟合了季节性模型

如果您检查res$mean,您会发现数字不同

          Jan      Feb      Mar      Apr      May      Jun      Jul      Aug      Sep      Oct
1960 27.69056 26.07680 29.26544 27.59444 28.93193 28.55379 29.84713 29.45347 29.16388 29.21343
          Nov      Dec
1960 27.26221 28.06863

根据您的最后评论,为了检查(对您而言)未知的 R 对象的“胆量”,总是最好从 class(res)、str(res) 开始,最后是 attributes(res)。后面会告诉你这个对象包含的所有属性:

attributes(res)
## v$names
##  [1] "method"    "model"     "level"     "mean"      "lower"     "upper"     "x"         "xname"    
##  [9] "fitted"    "residuals"

## $class
##  [1] "forecast"

所以现在你可以调查res$method 或res$model,最后是你要找的res$mean

【讨论】:

  • unique(res$mean) 是一个更好的解决方案。因为你的命令给了我 [1] 69894.82 69894.82
  • @trying,不是这样。在这种特定情况下会更好,因为您的预测只是拟合平均值,但并非总是如此,有时它不会在所有行中都是相同的数字
  • 你能告诉我你是怎么得出这个答案的吗?我对 R 中的数据结构感到困惑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2021-05-17
  • 2020-05-24
  • 1970-01-01
  • 2020-07-19
相关资源
最近更新 更多