【问题标题】:R Subset Inner Levels Nested DataframeR子集内部级别嵌套数据框
【发布时间】:2020-11-04 23:29:25
【问题描述】:

在使用 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]
}

谢谢

【问题讨论】:

    标签: r list subset purrr tidymodels


    【解决方案1】:

    当我想了解一些更深层次的东西时,我经常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 年 7 月 21 日创建

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

    【讨论】:

    • 嗨 Julia,这正是我想要的。非常感谢您的帮助。
    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 2014-02-11
    • 2015-04-18
    • 2015-11-02
    • 2020-07-13
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    相关资源
    最近更新 更多