R函数返回多个data.frames而不使用print()

时间:2018-01-06 04:08:55

标签: r function

无论如何返回多个data.frames而不在R函数中打印data.frames。这可能是R函数101但不确定为什么当只有1个data.frame时你不必打印它。您只需使用dplyr查询调用最终SHIFT /8

cran

1 个答案:

答案 0 :(得分:0)

这是你的代码,重构了一点:

library(tidyverse)

num_download <- function(pkgname, date){
    # vectorized
    srcs <- glue::glue("http://cran-logs.rstudio.com/{substr(date, 1, 4)}/{date}.csv.gz")
    dests <- basename(srcs)

    # download.file is not vectorized, so iterate in parallel; return nothing
    walk2(srcs, dests,
          function(src, dest){
              if (!file.exists(dest)){
                  val <- download.file(src, dest, quiet = TRUE)
                  if (val) stop("unable to download file ", src)
              }
          })

    dests %>% 
        # read files into list and rbind into data frame
        map_dfr(read_csv, col_types = "ccicccccci", progress = FALSE) %>% 
        filter(package %in% pkgname) %>% 
        count(package)
}

它有效:

num_download(c("filehash", "weathermetrics"), date = c("2016-07-20","2016-07-21"))
#> # A tibble: 2 x 2
#>   package            n
#>   <chr>          <int>
#> 1 filehash         378
#> 2 weathermetrics    13

tidyverse_downloads <- num_download(tidyverse_packages(), Sys.Date() - 8:2)

arrange(tidyverse_downloads, desc(n))
#> # A tibble: 25 x 2
#>    package      n
#>    <chr>    <int>
#>  1 tibble   69849
#>  2 rlang    59816
#>  3 cli      53371
#>  4 crayon   52918
#>  5 ggplot2  51213
#>  6 stringr  45042
#>  7 dplyr    43151
#>  8 magrittr 40455
#>  9 jsonlite 36851
#> 10 httr     30539
#> # ... with 15 more rows
嘿,上周发布了一个新的tibble发布,增加了蜡笔依赖。