2015-02-20 4 views
1

Вот кусок кода:Weird ошибка с lapply и dplyr/magrittr

data <- data.frame(a=runif(20),b=runif(20),subject=rep(1:2,10)) %>% 
group_by(subject) %>% 
do(distance = dist(.)) 

#no dplyr 
intermediate <- lapply(data$distance,as.matrix) 
mean.dists <- apply(simplify2array(intermediate),MARGIN = c(1,2),FUN=mean) 

#dplyr 
mean.dists <- lapply(data$distance,as.matrix) %>% 
apply(simplify2array(.),MARGIN=c(1,2),FUN=mean) 

Почему «нет dplyr» версия работы, и «dplyr» версия бросает ошибку, «DIM (X) должна имеют положительную длину "? Они кажутся мне одинаковыми.

ответ

3

Проблема в том, что вы не полностью выполнили линию трубопровода. Вы используете magrittr здесь, и этот вопрос имеет мало общего с dplyr

data$distance %>% 
    lapply(as.matrix) %>% 
    simplify2array %>% 
    apply(MARGIN=1:2, FUN=mean) 
+1

Почему бы не оставить из '.'? Это должно работать так же хорошо: 'data $ distance%>% lapply (as.matrix)%>% simplify2array%>% apply (MARGIN = 1: 2, FUN = mean)' поскольку '%>%' всегда обрабатывает данные к первому параметру. Кроме того, исходная версия будет работать с фигурными скобками: 'lapply (data $ distance, as.matrix)%>% {apply (simplify2array (.), MARGIN = c (1,2), FUN = mean)}'. Это связано с тем, насколько глубоко будут искать выражения для поиска '.', который нужно заменить. – MrFlick

+0

@MrFlick - очень хорошая точка и включена. – mnel

 Смежные вопросы

  • Нет связанных вопросов^_^