r - R子集内部级别嵌套数据框
问题描述
在使用 rsample、tidymodels 时,我使用以下代码创建了重新采样(见下文)。虽然我不想评估具有所有水平位置的模型,但在本例中从 1 到 5。假设我只想评估 4 和 5 水平位置的模型。我现实生活中的问题有点像这样。所以我不希望我的模型在所有水平位置都出现错误。
所以我的选择是使用 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 包(v0.3.0.9001)于 2020 年 7 月 21 日创建
第一个map()
提取"out_id"
,然后第二个提取这些 IDmap()
的extract()
第四个和第五个元素。
推荐阅读
- amazon-web-services - 从浏览器在 AWS 服务器上运行程序
- c# - 如何将 HeaderTemplateProperty 应用于 CustomControl 中的 HeaderProperty?
- html - BootstrapTable - 扩展 - FixedColumn [不工作]
- apache-spark - 从 Spark 估计要写入 HDFS 的部分文件数
- fortran - 如何自定义makefile文件来编译BLACS库
- mongodb - Mongo 返回两行而不是一
- sql-server - Agent XPs 服务器有什么作用?
- amazon-web-services - Cognito 忽略默认电子邮件验证类型
- ant - 调用 Ant 构建文件 Jenkins 2 groovy 管道
- razor-pages - 从 Blazor 中的页面组件调用 MainLayout 中的方法