我想公开已经在我的R包骨架的data /目录中发布的数据。请参阅此链接以获取“外部数据”共享基础:http://r-pkgs.had.co.nz/data.html。
我的数据以.txt格式存储。如果您不想通过延迟加载来加载数据,则只需通过加载R包require(myRpackage)然后执行data(datasetName)来加载...,您可以使用许多read方法正常读取数据.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包。
我的问题:不知道如何执行惰性数据加载时,如何调试惰性数据加载?即,什么代码确定我的数据/文件夹中的publishedData.txt中的数据是“ A-OK”,还是“ Not okay”?我知道他们正在使用scan(),但它应该知道.txt文件中的sep =“ \ t”,除此之外,我不确定是什么使它崩溃了?
我尝试过的事情:
我已尽力清除标题名称(例如,从列或行名字符串中删除非字母字符)。
我还删除了行名称列之外的其他任何列,该列中包含字符串数据而不是数字数据,以防万一在惰性数据加载中把stringsAsFactors设置为默认值TRUE(这会减慢速度)。很多)。
此外,每次尝试重新安装后,我都重新启动了R ...
答案 0 :(得分:0)
好的,所以我想出了一种方法来使它工作,而不必真正了解是什么使它崩溃了。
说您的数据集是使用read.table()加载的,但是不会如上所述通过lazydata加载来重新安装。可能是,您的标题/行名已关闭。一个快速的解决方案就是这样做:
# 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。
希望它可以帮助其他人。 :-)