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的第四个和第五个元素。
在使用 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的第四个和第五个元素。