繁体   English   中英

如何使用 purrr::map() 改变列表列以存储通过 recipe() 创建的“recipe”object?

[英]How to mutate a list-column using purrr::map() to store a "recipe" object created via recipe()?

我正在尝试将dplyr::mutate()purrr::map()结合使用来创建带有recipes::recipe()的“食谱” object 。

如果我在tibble上下文中执行此操作,则效果很好:

library(rsample)
library(recipe)

iris_split <- initial_split(iris, prop = 0.6)
data_set_training <- training(iris_split)

recipe_standalone <- recipe(x = data_set_training, Species ~ .) # works

相比之下:

library(tibble)
library(dplyr)
library(purrr)
library(tidyr)

tibble(subset_training = data_set_training) %>%
  nest(subset_training = subset_training) %>%
  mutate(iris_recipe = map(.x = subset_training, .f = ~recipe(x = .x, Species ~ .))) # doesn't work

错误: mutate()iris_recipe有问题。
iris_recipe = map(.x = subset_training, .f = ~recipe(x =.x, Species ~.))
x object '物种' 未找到


如何使用map()创建一个包含“配方”object 的新列表列?

所需 output
为了演示,我想准确地得到这个:

desired_output <- 
  tibble(subset_training = list(data_set_training),
         iris_recipe = list(recipe_standalone))

## # A tibble: 1 x 2
##   subset_training iris_recipe
##   <list>          <list>     
## 1 <df [90 x 5]>   <recipe>   

您以嵌套的方式创建了时髦的结构。 您已将 dataframe 作为列然后嵌套,因此拉动它,您实际上仍然有这个奇怪90x1数据框列。

tibble(subset_training = data_set_training) %>%
  nest(subset_training = subset_training) %>%
  pull(subset_training) %>%
  first()
#> # A tibble: 90 × 1
#>    subset_training$Sepal.Length $Sepal.Width $Petal.Length $Petal.Width $Species
#>                           <dbl>        <dbl>         <dbl>        <dbl> <fct>   
#>  1                          6.3          3.3           6            2.5 virgini…
#>  2                          6            2.2           4            1   versico…
#>  3                          5.7          2.8           4.5          1.3 versico…
#>  4                          7.2          3.6           6.1          2.5 virgini…
#>  5                          5            3.5           1.3          0.3 setosa  
#>  6                          5.1          3.8           1.6          0.2 setosa  
#>  7                          7.2          3.2           6            1.8 virgini…
#>  8                          5.7          4.4           1.5          0.4 setosa  
#>  9                          4.4          2.9           1.4          0.2 setosa  
#> 10                          5.2          3.4           1.4          0.2 setosa  
#> # … with 80 more rows

这是你应该如何嵌套它。

data_set_training %>%
  nest(subset_training = everything()) %>%
  pull(subset_training) %>%
  first()
#> # A tibble: 90 × 5
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species   
#>           <dbl>       <dbl>        <dbl>       <dbl> <fct>     
#>  1          6.3         3.3          6           2.5 virginica 
#>  2          6           2.2          4           1   versicolor
#>  3          5.7         2.8          4.5         1.3 versicolor
#>  4          7.2         3.6          6.1         2.5 virginica 
#>  5          5           3.5          1.3         0.3 setosa    
#>  6          5.1         3.8          1.6         0.2 setosa    
#>  7          7.2         3.2          6           1.8 virginica 
#>  8          5.7         4.4          1.5         0.4 setosa    
#>  9          4.4         2.9          1.4         0.2 setosa    
#> 10          5.2         3.4          1.4         0.2 setosa    
#> # … with 80 more rows

然后你得到你正在寻找的结果:

data_set_training %>%
  nest(subset_training = everything()) %>%
  mutate(iris_recipe = map(
    .x = subset_training,
    .f = ~recipe(x = .x, Species ~ .)
    ))
#> # A tibble: 1 × 2
#>   subset_training   iris_recipe
#>   <list>            <list>     
#> 1 <tibble [90 × 5]> <recipe>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM