【问题标题】:R - IMDb datasets not loadingR - IMDb 数据集未加载
【发布时间】:2019-09-05 19:52:11
【问题描述】:

我正在尝试编写一个函数,该函数将从此处提供的 IMDb 数据集页面下载和加载文件:https://datasets.imdbws.com/

问题是函数执行正在下载文件,但将其加载到任何对象。

我已经创建了单独的步骤代码,它工作正常。

url <- "https://datasets.imdbws.com/name.basics.tsv.gz"
tmp <- tempfile()
download.file(url, tmp)

name_basics <- readr::read_tsv(
  file = gzfile(tmp),
  col_names = TRUE, 
  quote = "",
  na = "\\N",
  progress = FALSE
)

文件已下载并加载到 name_basics。 但是当我尝试创建函数代码时,没有加载数据。 我做错了什么?

功能代码

imdbTSVfiles <- function(fileName){
  url <- paste0("https://datasets.imdbws.com/",fileName,".tsv.gz")
  tmp <- tempfile()
  download.file(url, tmp)

  name <- readr::read_tsv(
      file = gzfile(tmp),
      col_names = TRUE,
      quote = "",
      na = "\\N")
}

imdbTSVfiles("name.basics")

预期结果:提供的文件名已下载并加载。

【问题讨论】:

  • 已下载,但name 是函数的局部变量。你应该return(name) 来得到它。然后就可以给函数赋值了:result &lt;- imdbTSVfiles('name.basics')

标签: r readr


【解决方案1】:

您需要将数据存储到动态命名变量中,这可以使用assign()轻松实现。

imdbTSVfiles <- function(fileName){
  url <- paste0("https://datasets.imdbws.com/",fileName,".tsv.gz")
  tmp <- tempfile()
  download.file(url, tmp)

  assign(fileName,
         readr::read_tsv(
           file = gzfile(tmp),
           col_names = TRUE,
           quote = "",
           na = "\\N"),
  envir = .GlobalEnv)
}

imdbTSVfiles("name.basics")

这应该将数据存储在name.basics 变量中。

【讨论】:

  • 很棒的提示!我能够完全自动下载和加载文件。你是个男人!
猜你喜欢
  • 2019-12-19
  • 2013-10-31
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
  • 2015-06-02
  • 1970-01-01
  • 2020-06-13
相关资源
最近更新 更多