cjyetman · GitHub

When using first() (or last()) in a chain inside a mutate() (or filter()) command, the x argument has to be explicitly set. This is easy to work around in numerous ways, but the behavior seems strange, so maybe it points to something not quite right.

examples (using R v3.5.0 and dplyr v0.7.5)...

library(dplyr)
mutate(tibble(v1 = 5:6), v2 = 1:4 %>% first())
# Error in mutate_impl(.data, dots) : bad value
clonefirst <- first
mutate(tibble(v1 = 5:6), v2 = 1:4 %>% clonefirst())
# # A tibble: 2 x 2
#      v1    v2
#   <int> <int>
# 1     5     1
# 2     6     1
mutate(tibble(v1 = 5:6), v2 = 1:4 %>% first(.))
# # A tibble: 2 x 2
#      v1    v2
#   <int> <int>
# 1     5     1
# 2     6     1
mutate(tibble(v1 = 5:6), v2 = 1:4 %>% nth(1))
# # A tibble: 2 x 2
#      v1    v2
#   <int> <int>
# 1     5     1
# 2     6     1
mutate(tibble(v1 = 5:6), v2 = 1:4 %>% `[[`(1))
# # A tibble: 2 x 2
#      v1    v2
#   <int> <int>
# 1     5     1
# 2     6     1
mutate(tibble(v1 = 5:6), v2 = first(1:4))
# # A tibble: 2 x 2
#      v1    v2
#   <int> <int>
# 1     5     1
# 2     6     1
1:4 %>% first()
# [1] 1
first(1:4)
# [1] 1

Read the original on github.com ↗