R 子集内部级别嵌套数据框

R Subset Inner Levels Nested Dataframe

在使用 rsample、tidymodels 时,我使用以下代码创建了重采样(见下文)。虽然我不想评估具有所有 horizon 个位置的模型,但在本例中是从 1 到 5。假设我只想评估模型的 4 个和 5 个 horizon 个位置。我的现实生活问题有点像这样。所以我不希望我的模型在所有 horizon 个位置都出现错误。

所以我的选择是使用 rsample::rolling_origin() 然后对评估指标进行子集化。我可以用 for 循环来做到这一点......但我对使用另一种方式感到好奇。我想用 purrr 来做。我知道我可能应该移动一个,因为它正在正常工作......但它让我很痛苦。

如何使用 purrr 的函数引用第三个内部层次?

require(tidyverse)
require(tidymodels)

data(cars)

roll_rs <-rolling_origin(
data=cars,
initial = floor(0.80*(nrow(cars))),
assess = 5,
skip = 0,
cumulative = TRUE )

new_roll_rs<-roll_rs

for (i in 1:13){
new_roll_rs[[1]][[i]][["out_id"]]<-roll_rs[[1]][[i]][["out_id"]][4:5]
}

谢谢

当我想了解一些更深层次的东西时,我经常 map() 不止一次:

library(tidymodels)
#> ── Attaching packages ──────────────────────────────────────────────── tidymodels 0.1.1 ──
#> ✓ broom     0.7.0      ✓ recipes   0.1.13
#> ✓ dials     0.0.8      ✓ rsample   0.0.7 
#> ✓ dplyr     1.0.0      ✓ tibble    3.0.3 
#> ✓ ggplot2   3.3.2      ✓ tidyr     1.1.0 
#> ✓ infer     0.5.3      ✓ tune      0.1.1 
#> ✓ modeldata 0.0.2      ✓ workflows 0.1.2 
#> ✓ parsnip   0.1.2      ✓ yardstick 0.0.7 
#> ✓ purrr     0.3.4
#> ── Conflicts ─────────────────────────────────────────────────── tidymodels_conflicts() ──
#> x purrr::discard() masks scales::discard()
#> x dplyr::filter()  masks stats::filter()
#> x dplyr::lag()     masks stats::lag()
#> x recipes::step()  masks stats::step()

data(cars)

roll_rs <- rolling_origin(
  data = cars,
  initial = floor(0.80*(nrow(cars))),
  assess = 5,
  skip = 0,
  cumulative = TRUE
)

roll_rs$splits %>% 
  map("out_id") %>% 
  map(magrittr::extract, c(4, 5))
#> [[1]]
#> [1] 44 45
#> 
#> [[2]]
#> [1] 45 46
#> 
#> [[3]]
#> [1] 46 47
#> 
#> [[4]]
#> [1] 47 48
#> 
#> [[5]]
#> [1] 48 49
#> 
#> [[6]]
#> [1] 49 50

reprex package (v0.3.0.9001)

于 2020-07-21 创建

第一个map()拉出"out_id",然后第二个map()extract()这些ID的第四个和第五个元素。