2014-01-31 6 views
8

Мне нравится dplyr для обработки данных, но я не понимаю, как его использовать для программирования. Например, чтобы перемасштабировать некоторые переменные, мы могли бы сделать:Как использовать dplyr для программирования

mutate(cars, speed.scaled = scale(speed), dist.scaled = scale(dist)) 

Очень круто. Но теперь предположим, что я хочу написать функцию, которая использует mutate для масштабирования всех переменных в фрейме данных. Как создать аргумент ...? Лучшее, что я могу придумать, это что-то вроде:

fnargs <- lapply(names(cars), function(x){call("scale", as.name(x))}) 
names(fnargs) <- paste0(names(cars), ".scaled") 
do.call(mutate, c(.data=as.name("cars"), fnargs)) 

Или есть альтернативный интерфейс, более дружественный к программированию?

+1

См. Http://stackoverflow.com/questions/21295936/ – mnel

+0

, мы доберемся туда: https://github.com/hadley/dplyr/issues/178 –

ответ

4

Easy peasy: используйте mutate_each(cars, funs(scale)) или apply(cars, 2, scale).

1

Это может быть сделано в базовом R следующим образом:

cars.scaled <- as.data.frame(scale(cars)) 

или

cars.scaled <- replace(cars, TRUE, lapply(cars, scale)) 

или

cars.scaled <- cars 
cars.scaled[] <- lapply(cars, scale) 

Первый выше, могут быть переведены на работу с %>%, как это :

cars.scaled <- cars %>% scale %>% as.data.frame