【问题标题】:How to print row of dataframe that purrr::map is acting on in R如何打印 purrr::map 在 R 中作用的数据帧行
【发布时间】:2019-01-10 19:54:28
【问题描述】:

我正在使用purrr::map 在长数据框列表列上运行一个耗时的函数,我想打印一个正在执行的行的指示器,以便我可以跟踪进度。

这是一个小例子:

当我运行这个时:

library(dplyr)
library(tidyr)
library(purrr)
mtcars %>% 
    group_by(carb) %>% 
    nest() %>% 
    mutate(n = map(data, nrow))

我想输出正在操作的行的carb

#> 4
#> 1
#> 2
#> 3
#> 6
#> 8

您可以像这样使用for 循环来获得:

df <-
    mtcars %>% 
    group_by(carb) %>% 
    nest() %>% 
    mutate(n = NA)
for (i in 1:nrow(df)) {
    print(df$carb[i])
    df$n[i] <- list(nrow(df$data[[i]]))
}

【问题讨论】:

    标签: r for-loop tidyverse purrr


    【解决方案1】:

    您可以在使用map2() 运行data 的同时运行carb。然后你可以在你的函数中添加一个print() 语句来输出carb

    dat = mtcars %>% 
        group_by(carb) %>% 
        nest() %>% 
        mutate(n = map2(data, carb, ~{
            print(.y)
            nrow(.x)
            }) 
            )
    
    [1] 4
    [1] 1
    [1] 2
    [1] 3
    [1] 6
    [1] 8
    
    dat
    # A tibble: 6 x 3
       carb data               n        
      <dbl> <list>             <list>   
    1     4 <tibble [10 x 11]> <int [1]>
    2     1 <tibble [7 x 11]>  <int [1]>
    3     2 <tibble [10 x 11]> <int [1]>
    4     3 <tibble [3 x 11]>  <int [1]>
    5     6 <tibble [1 x 11]>  <int [1]>
    6     8 <tibble [1 x 11]>  <int [1]>
    

    为方便起见,我使用了公式语法,其中.x 指的是map2() 中的第一个向量,.y 指的是第二个向量。相反,如果它更清晰,您可以执行匿名函数。 (我不确定我是否喜欢带有波浪号的括号。)

    mtcars %>% 
        group_by(carb) %>% 
        nest() %>% 
        mutate(n = map2(data, carb, function(x, y) {
            print(y)
            nrow(x)
            })
            )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2020-03-08
      • 2019-08-10
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多