错误:只能为do()提供单个未命名参数

时间:2017-04-29 02:06:20

标签: r visualization large-data

我尝试使用以下链接中的代码,使用bigvis包

进行大型数据集可视化

http://rstudio-pubs-static.s3.amazonaws.com/7457_8740a6a481f042ad8d2bce17e7b5bd04.html#Grouped

链接中的功能是:

bin_by <- function(.data, ...){
 plyr:::list_to_dataframe(do(.data,
                          function(.data, ...){
                            eval(substitute(condense(bin(...))),
                                 env=.data,
                                 enclos=parent.frame())
                          }
                          , ...)
 ,labels=attr(.data, 'labels'))
}

但是当我跑步时,R给了我这样的错误:

错误:只能为do()提供单个未命名参数   来自:named_args(args)

任何人都可以帮我理解这个吗?非常感谢!! 我不想直接运行浓缩和装箱,因为我想做箱形图,如果有人能告诉我如何用bigvis这样做,我也会非常感激。

1 个答案:

答案 0 :(得分:0)

函数dplyr :: do和bugvis :: bin已经大大改变了。以下代码将起作用(将bigvis / dplyr更新为当前的2017-04-28 Github版本)

确实,您不再需要list_to_dataframe了。我认为do函数不会接受多个未命名的参数。另外,由于'...'用于传递未加引号的符号,因此检查函数(这里是bigvis :: vis)是否已更新始终是一个好习惯。

注意:

  1. dplyr::do功能可以在这里删除

  2. plyr::list_to_dataframe导致其他问题,因为do / bin函数的返回值已更新。

  3. library(ggplot2)
    library(bigvis)
    library(dplyr)
    library(data.table)
    
    f<-function(.data,x, width){
      eval(substitute(condense(bin(x, width=width))),
           env=.data,
           enclos=parent.frame())
    }
    
    bin_by <- function(.data, x, width){
      do(.data,f(.,x,width = width))
    }
    
    num <- 10e6
    binwidth=1
    obs <- rbind(data.frame(x=rnorm(num), name='normal'),
                 data.frame(x=rnorm(num, sd=6), name='wide'),
                 data.frame(x=rnorm(num, mean=3), name='right'))
    
    bins <- bin_by(obs, x, binwidth)
    ggplot(data=bins, aes(x=x, y=.count)) + geom_line() + geom_area(alpha=1/10, position="identity")