Chciałbym zastosować transformację do wszystkich kolumn przez dplyr :: mutate_each, np.Przepisz nazwę kolumny do funkcji z mutate_each
library(dplyr)
mult <- function(x,m) return(x*m)
mtcars %>% mutate_each(funs(mult(.,2))) # Multiply all columns by a factor of two
Jednak transformacja powinna mieć parametry w zależności od nazwy kolumny. Dlatego nazwa kolumny powinny być przekazywane do funkcji jako dodatkowy argument
named.mult <- function(x,colname) return(x*param.A[[colname]])
Przykład: mnożenie każda kolumna przez inny czynnik:
param.A <- c()
param.A[names(mtcars)] <- seq(length(names(mtcars)))
param.A
# mpg cyl disp hp drat wt qsec vs am gear carb
# 1 2 3 4 5 6 7 8 9 10 11
Ponieważ nazwa kolumny jest tracona podczas mutate_each, obecnie to obejść, przekazując listę z leniwym evalution do mutate_ (wersja SE):
library(lazyeval)
named.mutate <- function(fun, cols) sapply(cols, function(n) interp(~fun(col, n), fun=fun, col=as.name(n)))
mtcars %>% mutate_(.dots=named.mutate(named.mult, names(.)))
Działa, ale czy istnieje specjalna zmienna, taka jak .nazwa, która zawiera nazwę kolumny . dla każdego wykonania koligacji? Mogę więc zaproponować coś innego, jak np.
mtcars %>% mutate_each(funs(named.mult(.,.name)))