2015-03-11 13 views
6

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 

Odpowiedz

6

Będziesz chcą korzystać z wersji Standard Evaluation (SE) z mutate_each - czyli mutate_each_:

mymutate2 <- function(data, tag, m) { 
    data %>% mutate_each_(funs(paste0(., tag)), ~matches(m)) 
} 

Dla dodatkowej jasności, następujący jest równoważny:

mymutate3 <- function(data, tag, m) { 
    data %>% mutate_each_(~paste0(., tag), ~matches(m)) 
} 

A za vignette:

„Najlepiej użyć formuły [~ w przeciwieństwie do quote() lub przy użyciu ciągów ""], ponieważ formuła oddaje zarówno wyraz oceniać i środowisko, w którym powinien to być oceniana ... Używanie czegokolwiek innego niż formuły zakończy się niepowodzeniem, ponieważ nie wie, do którego środowiska należy zaglądać. "

Powiązane problemy