使用R、dplyr和rowwise时如何定义一个变量来记录处理的行数?

How to define a variable to record the number of processed rows when using R, dplyr and rowwise?

我有一个功能需要很长时间才能 运行。所以,我想知道处理了我的数据框的多少行。通常,我们可以在for循环中定义一个变量来轻松处理这个问题。但我不知道如何在dplyr中做到这一点。

假设代码是:

library(tidyverse)

myFUN <-functin (x) {
  x + 1
}

a <- tibble(id=c(1:3),x=c(3,5,1))

a1 <- a %>%
  rowwise() %>%
  mutate(y=myFUN(x))

我希望在代码的某个地方,我可以定义一个变量 i。每处理一行,该值将加 1,然后在控制台中打印其值,如:

1
2
3

你能否将另一个变量传递给函数,这将是数据帧的行号,并在函数中打印它。像这样的东西:

myFUN <-function (x, y) {
   message(y)
   x + 1
}

然后使用

library(dplyr)
a %>%  mutate(y = purrr::map2_dbl(x, row_number(), myFUN))

#1 
#2 
#3 
# A tibble: 3 x 3
#     id     x     y
#  <int> <dbl> <dbl>
#1     1     3     4
#2     2     5     6
#3     3     1     2

如果你的函数是向量化的,你可以放手map_dbl然后做

a %>% mutate(y= myFUN(x, seq_len(n())))