【问题标题】:Weird error with lapply and dplyr/magrittrlapply 和 dplyr/magrittr 的奇怪错误
【发布时间】:2015-02-20 02:49:58
【问题描述】:

这是一段代码:

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)

为什么“no dplyr”版本有效,而“dplyr”版本抛出错误,“dim(X) must have a positive length”?他们看起来和我一模一样。

【问题讨论】:

    标签: r dplyr magrittr


    【解决方案1】:

    问题是您还没有完全实现管道。你这里用的是magrittr,问题和dplyr关系不大

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

    【讨论】:

    • 为什么不忽略.?这应该同样有效:data$distance %&gt;% lapply(as.matrix ) %&gt;% simplify2array %&gt;% apply( MARGIN=1:2, FUN=mean) 因为%&gt;% 总是将数据通过管道传输到第一个参数。此外,原始版本可以使用大括号:lapply(data$distance,as.matrix) %&gt;% {apply(simplify2array(.),MARGIN=c(1,2),FUN=mean)}。这与搜索表达式以查找要替换的 . 的深度有关。
    猜你喜欢
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2012-08-12
    相关资源
    最近更新 更多