簡體   English   中英

使用 purrr::map_dfr 從值而不是名稱中分配 id 值

[英]assigning id values from values, not names, with purrr::map_dfr

我認為這個問題與使用 map_dfr and.id for list names 和 list of list names但不完全相同...

我經常將map_dfr用於我想使用每個參數的而不是它的name作為.id變量的情況。 這是一個愚蠢的例子:我正在計算mtcars$mpg的二、四和六次方的平均值:

library(tidyverse)
list(2,4,6) %>% map_dfr(~tibble(x=mean(mtcars$mpg^.)), .id="name")
##   name           x
##   <chr>      <dbl>
## 1 1           439.
## 2 2        262350.
## 3 3     198039783.

我希望name變量為 2、4、6 而不是 1、2、3。我可以通過在管道中包含setNames(.data)來破解它:

list(2,4,6) %>% 
   setNames(.data) %>% 
   map_dfr(~tibble(x=mean(mtcars$mpg^.)), .id="name")

但我想知道我是否缺少更慣用的方法?


至於使用類似~ tible(name=., ...)的建議:很好,但對於映射function已經返回一個 tibble 的情況來說不太方便,因為我們必須添加一個否則不必要的tibble()調用:

list(2, 4, 6) %>%   
    map_dfr(~ tibble(name=., 
       broom::tidy(lm(mpg~cyl, data=mtcars, offset=rep(., nrow(mtcars))))))

好的,我想我在發布前不久發現了這個(所以我會回答)。 這個答案指出tibble::lst()是一個自命名列表 function,所以只要我們使用tibble::lst(2,4,6)而不是list(2,4,6) ,它就可以工作,例如

lst(2,4,6) %>% map_dfr(~tibble(x=mean(mtcars$mpg^.)), .id="name")

這也可以工作:

library(tidyverse)

#@ben Bolker answer.
lst(2,4,6) %>% map_dfr(~tibble(x=mean(mtcars$mpg^.)), .id="power")
#> # A tibble: 3 x 2
#>   power          x
#>   <chr>      <dbl>
#> 1 2           439.
#> 2 4        262350.
#> 3 6     198039783.

list(2, 4, 6) %>% map_df(~ tibble(power = as.character(.x) , x = mean(mtcars$mpg^.)))
#> # A tibble: 3 x 2
#>   power          x
#>   <chr>      <dbl>
#> 1 2           439.
#> 2 4        262350.
#> 3 6     198039783.

#another option
seq(2, 6, 2) %>%  map2_df(rerun(length(.), mtcars$mpg), ~ c(x = as.character(.x), mean = round(mean(.y^.x), 0)))
#> # A tibble: 3 x 2
#>   x     mean     
#>   <chr> <chr>    
#> 1 2     439      
#> 2 4     262350   
#> 3 6     198039783

代表 package (v2.0.0) 於 2021 年 6 月 6 日創建

這也是可能的,但它不是我的首選,只有map就足夠了:

library(purrr)

list(2, 4, 6) %>%
  pmap_dfr(~ tibble(power = c(...), x = map_dbl(c(...), ~ mean(mtcars$mpg ^ .x))))

# A tibble: 3 x 2
  power          x
  <dbl>      <dbl>
1     2       439.
2     4    262350.
3     6 198039783.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM