R 包:通过 system.file() 和 read.table() 从 R data.table 读取数据
R package: read in data via system.file() and read.table() from R data.table
我正在 /data
中创建一个包含多个文件的 R 包。在 R 包中加载数据的方式是使用 system.file()
、
system.file(..., package = "base", lib.loc = NULL, mustWork = FALSE)
我想将 /data
中的文件加载到 R data.table 中,其扩展名为 *.txt.gz
、my_file.txt.gz
。如何通过 read.table()
或 fread()
将其加载到 data.table 中?
在 R 脚本中,我试过:
#' @import data.table
#' @export
my_function = function(){
my_table = read.table(system.file("data", "my_file.txt.gz", package = "FusionVizR"), header=TRUE)
}
这会通过 devtools
document()
:
导致错误
Error in read.table(system.file("data", "my_file.txt.gz", package = "FusionVizR"), header = TRUE) (from script1.R#7) :
no lines available in input
In addition: Warning message:
In file(file, "rt") :
file("") only supports open = "w+" and open = "w+b": using the former
我似乎通过 fread()
遇到了同样的问题
#' @import data.table
#' @export
my_function() = function(){
my_table = fread(system.file("data", "my_file.txt.gz", package = "FusionVizR"), header=TRUE)
}
这输出错误:
Input is either empty or fully whitespace after the skip or autostart. Run again with verbose=TRUE.
因此,system.file()
似乎没有为我可以加载到 R data.table 中的文件提供对象。我该怎么做呢?
帮自己一个大忙,仔细研究 fread()
:它是 data.table
中最好的功能之一。我有一些例子(在工作中)从其他命令的管道中读取,读取压缩数据等等。
这是一个简单的 mock 示例:
R> write.csv(iris, file="/tmp/demo.csv")
R> system("gzip /tmp/demo.csv") # to be very plain
R> fread("zcat /tmp/demo.csv.gz")
V1 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1: 1 5.1 3.5 1.4 0.2 setosa
2: 2 4.9 3.0 1.4 0.2 setosa
3: 3 4.7 3.2 1.3 0.2 setosa
4: 4 4.6 3.1 1.5 0.2 setosa
5: 5 5.0 3.6 1.4 0.2 setosa
---
146: 146 6.7 3.0 5.2 2.3 virginica
147: 147 6.3 2.5 5.0 1.9 virginica
148: 148 6.5 3.0 5.2 2.0 virginica
149: 149 6.2 3.4 5.4 2.3 virginica
150: 150 5.9 3.0 5.1 1.8 virginica
R>
似乎我一栏写得太多了(行名),但你明白了。
现在,您甚至不需要 fread
(但它仍然比替代方案更强大):
R> head(read.csv(file="/tmp/demo.csv.gz"))
X Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 1 5.1 3.5 1.4 0.2 setosa
2 2 4.9 3.0 1.4 0.2 setosa
3 3 4.7 3.2 1.3 0.2 setosa
4 4 4.6 3.1 1.5 0.2 setosa
5 5 5.0 3.6 1.4 0.2 setosa
6 6 5.4 3.9 1.7 0.4 setosa
R>
R 自己发现它需要压缩文件。
编辑: 我早些时候在编辑这个问题时它被我删除了,这就像它得到的一样令人沮丧。简而言之:
system.file()
有效,例如file <- system.file("rawdata", "population.csv", package="gunsales")
是否 包含文件存在时的完整路径:"/usr/local/lib/R/site-library/gunsales/rawdata/population.csv"
。但这很容易搞砸。 (不用说我确实有包和文件。)
- 查看
data/
目录以及 Writing R Extensions 所说的内容。这是一个很好的机制。
我正在 /data
中创建一个包含多个文件的 R 包。在 R 包中加载数据的方式是使用 system.file()
、
system.file(..., package = "base", lib.loc = NULL, mustWork = FALSE)
我想将 /data
中的文件加载到 R data.table 中,其扩展名为 *.txt.gz
、my_file.txt.gz
。如何通过 read.table()
或 fread()
将其加载到 data.table 中?
在 R 脚本中,我试过:
#' @import data.table
#' @export
my_function = function(){
my_table = read.table(system.file("data", "my_file.txt.gz", package = "FusionVizR"), header=TRUE)
}
这会通过 devtools
document()
:
Error in read.table(system.file("data", "my_file.txt.gz", package = "FusionVizR"), header = TRUE) (from script1.R#7) :
no lines available in input
In addition: Warning message:
In file(file, "rt") :
file("") only supports open = "w+" and open = "w+b": using the former
我似乎通过 fread()
#' @import data.table
#' @export
my_function() = function(){
my_table = fread(system.file("data", "my_file.txt.gz", package = "FusionVizR"), header=TRUE)
}
这输出错误:
Input is either empty or fully whitespace after the skip or autostart. Run again with verbose=TRUE.
因此,system.file()
似乎没有为我可以加载到 R data.table 中的文件提供对象。我该怎么做呢?
帮自己一个大忙,仔细研究 fread()
:它是 data.table
中最好的功能之一。我有一些例子(在工作中)从其他命令的管道中读取,读取压缩数据等等。
这是一个简单的 mock 示例:
R> write.csv(iris, file="/tmp/demo.csv")
R> system("gzip /tmp/demo.csv") # to be very plain
R> fread("zcat /tmp/demo.csv.gz")
V1 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1: 1 5.1 3.5 1.4 0.2 setosa
2: 2 4.9 3.0 1.4 0.2 setosa
3: 3 4.7 3.2 1.3 0.2 setosa
4: 4 4.6 3.1 1.5 0.2 setosa
5: 5 5.0 3.6 1.4 0.2 setosa
---
146: 146 6.7 3.0 5.2 2.3 virginica
147: 147 6.3 2.5 5.0 1.9 virginica
148: 148 6.5 3.0 5.2 2.0 virginica
149: 149 6.2 3.4 5.4 2.3 virginica
150: 150 5.9 3.0 5.1 1.8 virginica
R>
似乎我一栏写得太多了(行名),但你明白了。
现在,您甚至不需要 fread
(但它仍然比替代方案更强大):
R> head(read.csv(file="/tmp/demo.csv.gz"))
X Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 1 5.1 3.5 1.4 0.2 setosa
2 2 4.9 3.0 1.4 0.2 setosa
3 3 4.7 3.2 1.3 0.2 setosa
4 4 4.6 3.1 1.5 0.2 setosa
5 5 5.0 3.6 1.4 0.2 setosa
6 6 5.4 3.9 1.7 0.4 setosa
R>
R 自己发现它需要压缩文件。
编辑: 我早些时候在编辑这个问题时它被我删除了,这就像它得到的一样令人沮丧。简而言之:
system.file()
有效,例如file <- system.file("rawdata", "population.csv", package="gunsales")
是否 包含文件存在时的完整路径:"/usr/local/lib/R/site-library/gunsales/rawdata/population.csv"
。但这很容易搞砸。 (不用说我确实有包和文件。)- 查看
data/
目录以及 Writing R Extensions 所说的内容。这是一个很好的机制。