0

我有一个需要很长时间才能运行的功能。所以,我想知道我的数据框有多少行被处理了。通常,我们可以在 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
4

1 回答 1

2

您能否将另一个变量传递给函数,该变量将是数据帧的行号并将其打印在函数中。就像是 :

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())))
于 2019-11-12T04:45:17.690 回答