我一定非常困惑。环顾四周但却找不到合适的答案,感觉我做错了什么。
这是一个极简主义的例子:
我的函数test
从文件夹导入文件,然后对该文件进行后续分析。我在path = "inst/extdata/input_data"
test = structure(function(path,letter) {
file = paste0(path, "/file_",letter,".tsv.gz")
data = read.csv(file,sep="\t",header=F,quote="\"",stringsAsFactors=F)
return(mean(data$var1))
}, ex = function(){
path = "inst/extdata/input_data"
m1 = test(path,"A")
})
我正在使用包目录的文件夹R/
中的函数构建一个包。
当我将工作目录设置为包父并逐行运行示例时,一切都很顺利。但是,当我使用R CMD check
检查包时,它会给我以下内容:
cannot open file 'inst/extdata/input_data/file_A.tsv.gz': No such file or directory
Error in file(file, "rt") : cannot open the connection
我想在检查和构建包时,工作目录会自动设置为包的父目录(在我的例子中是"C:/Users/yuhu/R/Projects/ABCDpackage"
但似乎并非如此。
在这种情况下,最佳做法是什么?我会避免转换.rda
格式的所有数据并将其放在data
文件夹中,因为文件太多了。有没有办法编译包并在函数示例中设置包所在的相对工作目录?这在分发包时也会有所帮助(因此它不应该是我自己的路径)
非常感谢你的帮助。
答案 0 :(得分:2)
当R CMD检查(或稍后用户)运行该示例时,您需要提供该文件的完整路径!您可以使用system.file
或path.package
命令轻松构建该路径。
如果您的包名为foo,则以下操作应该可以解决问题:
}, ex = function(){
path = paste0(system.file(package = "foo"), "/extdata/input_data")
m1 = test(path,"A")
})
您可能希望在某处独立添加file.path命令。
因为read.csv只是read.table的包装器,所以我不希望w.r.t有任何根本的区别。读取压缩文件。
注释:R在构建系统目录时删除目录的“inst /”部分。这个thread讨论了inst目录
答案 1 :(得分:0)
我想你可能只想和read.table一起去......无论如何都要尝试一下。
fopen <- file(paste0(path,"/file_",letter,".tsv.gz"),open="rt")
data <- read.table(fopen,sep="\t",header=F,quote="\"",stringsAsFactors=F)
细化:
在一天结束时,我认为您的问题主要是因为您使用read.csv而不是read.table,它可以直接打开.gz压缩文件。所以只是为了确定。这是我做的一个小实验。
实验:
# zip up a .csv file (in this case example_A.csv) that exists in my working directory into .gz format
system("gzip example_A.csv")
# just wanted to pass the path as a variable like you did
path <- getwd()
file <- paste0(path, "/example_", "A", ".csv.gz")
data <- read.table(file, sep=",", header=FALSE, stringsAsFactors=FALSE) # I think
# these are the only options you need.
# stringsAsFactors=FALSE is agood one.
data <- data[1:5,1:7] # a subset of the data
V1 V2 V3 V4 V5 V6 V7
1 id Scenario Region Fuel X2005 X2010 X2015
2 1 BSE9VOG4 R1 Biomass 0 2.2986 0.8306
3 2 BSE9VOG4 R1 Coal 7.4339 13.3548 9.2918
4 3 BSE9VOG4 R1 Gas 1.9918 2.4623 2.5558
5 4 BSE9VOG4 R1 LFG 0.2111 0.2111 0.2111
在一天结束时(我说的太多了)你可以确定问题出在你用来读取压缩文件的方法或你为文件名构建的文本字符串上(避风港)不看后者。无论如何运气好的包装。我希望它会变成潮流。