Podczas próby rozwiązania this problem napotkałem problem z mutate_each
z dplyr
. Chciałem go użyć w funkcji i przekazać mu argumenty. Udało się to dla funs()
, ale nie dla matches()
.Funkcja mutatis_each w obrębie funkcji dplyr działa, ale mecze() nie znajdują argumentu
Pozwolę sobie pokazać prosty przykład, w którym zadaniem jest dodanie do tagu wartości niektórych zmiennych.
library(dplyr)
mydf <- data.frame(this_var1 = c("a", "b", "c", "d", "e"),
this_var2 = c("b", "c", "d", "e", "f"),
that_var1 = c("x", "y", "z", "w", "u"))
mymutate1 <- function(data, tag) {
data %>% mutate_each(funs(paste0(., tag)))
}
mymutate1(mydf, "_foo")
this_var1 this_var2 that_var1
1 a_foo b_foo x_foo
2 b_foo c_foo y_foo
3 c_foo d_foo z_foo
4 d_foo e_foo w_foo
5 e_foo f_foo u_foo
Działa to jak urok. Jednak jeśli spróbuję kontrolować również dla których zmiennych transformacja powinna zostać zastosowana, to się nie powiedzie. To jest następujący: Error in is.string(match) : object 'm' not found
. Dlaczego znaleziono tag
, a nie m
?
Sam kod działa zgodnie z przeznaczeniem:
mydf %>% mutate_each(funs(paste0(., "_foo")), matches("this"))
this_var1 this_var2 that_var1
1 a_foo b_foo x
2 b_foo c_foo y
3 c_foo d_foo z
4 d_foo e_foo w
5 e_foo f_foo u