【问题标题】:How does lazydata loading work in R package installation?延迟数据加载在 R 包安装中如何工作?
【发布时间】:2019-06-20 09:26:17
【问题描述】:

我想公开已经发布在我的 R 包框架的 data/ 目录中的数据。有关“外部数据”共享基础知识,请参阅此链接:http://r-pkgs.had.co.nz/data.html

我的数据以 .txt 格式存储。如果您不想通过延迟加载加载数据,只需通过加载 R 包 require(myRpackage) 然后执行 data(datasetName) 来加载数据...您可以使用许多读取正常读取数据.table(), read.csv2() 基础 R 中的函数。

我的数据集在这个例子中被称为“publishedData.txt”,可以如下加载,效果很好:

tmp = read.table("/dir/to/R/package/data/publishedData.txt", sep="\t", header=TRUE)

但是,当我用这个新的闪亮数据重新安装我的 R 包时,我一遍又一遍地收到以下失败消息(见下面粘贴的)。

Downloading GitHub repo myGitRepo/myRpackage@master
from URL https://api.github.com/repos/myGitRepo/myRpackage/zipball/master
Installing myRpackage
library='/Library/Frameworks/R.framework/Versions/3.5/Resources/library' -- 
install-tests 
* installing *source* package ‘myRpackage’ ...
** R
** data
*** moving datasets to lazyload DB
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = 
dec,  : 
  line 1 did not have 215 elements
ERROR: lazydata failed for package ‘myRpackage’
* removing 
‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library/myRpackage’
Installation failed: Command failed (1)

请注意,上述 Github 存储库不是真实的。我正在写一个通用的帖子,所以不要尝试自己安装这个假的 R 包。

我的问题:当我不知道如何执行延迟数据加载时,如何调试延迟数据加载?即,什么代码决定我的 data/ 文件夹中的 publishedData.txt 中的数据是“A-OK”还是“不好”?我知道他们正在使用 scan(),但它应该知道 .txt 文件中的 sep="\t" ,除此之外,我不确定是什么绊倒了它?

我尝试过的事情:

  1. 我已尽我所能清除标题名称(例如,从列名或行名字符串中删除非字母字符)。

  2. 我还删除了除 rownames 列之外的任何其他列,其中包含字符串数据而不是数字数据,以防在延迟数据加载中将 stringsAsFactors 设置为默认值 TRUE(这会减慢速度)很多)。

  3. 另外,我在每次重新安装尝试后都重新启动了 R...

【问题讨论】:

    标签: r lazy-loading r-package


    【解决方案1】:

    好的,所以我想出了一种方法来让它工作,而不必真正了解是什么绊倒了它。

    假设您的数据集使用 read.table() 加载,但没有像上面描述的那样使用惰性数据加载重新安装。很有可能,您的标题/行名已关闭。一个快速的解决方案就是这样做:

    # Load your data into R the way it works
    tmp = read.table("/dir/to/R/package/data/publishedData.txt", sep="\t", header=TRUE)
    # Write data to same file with these arguments
    write.table(tmp, file="/dir/to/R/package/data/publishedData.txt", sep="\t", row.names = TRUE, col.names = TRUE)
    

    然后,使用 git 更新您的 Github 存储库,然后尝试重新安装 R 包。这次它会起作用的! .txt 文件的不同之处在于 col.names 的标题 - 第一个“列”没有与行名关联的标签。它只是从数据矩阵第 1 列的 col.name 开始。然后,在第 2 行,第 2 行的行名开始,然后是所有数据。所以从技术上讲,如果您要使用不同的方法解析这些数据,那么第 1 行中的元素比第 2 行少 1 个。

    希望它可以帮助别人。 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多