r - 如何打印 purrr::map 在 R 中作用的数据帧行

标签 r for-loop tidyverse purrr

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

最佳答案

您可以在使用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)
        })
        )

关于r - 如何打印 purrr::map 在 R 中作用的数据帧行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51663855/

相关文章:

Java 8 forEach 带索引

c++ - 在 C++ 中评估变量 if 语句

R:预测组的新值

r - 通过匹配正则表达式将字符串分解为组件

r - dplyr Mutate 中的错误 - 遍历列以生成图形

r - 在 R 中按行计算 2 个值之间的 NA 数量

python - 有没有办法改变for循环的迭代器?

r - 如何在R中编写具有多个分组变量的函数?我正在使用 curl 运算符

r - 加入 data.table 时值发生变化

r - Knit2html 不复制 R Studio 中 Knit HTML 按钮的功能