我正在开发一个带有函数的R-package,该函数应该返回带有完整路径的文件名,方法是给出路径和几个文件名,或者 - 如果在Windows下以交互模式 - 通过打开文件浏览器choose.files()
仅显示以csv
,dat
或txt
结尾的文件。
由于choose.files()
和变量Filters
仅存在于Windows下,因此会在适当的if()
子句中出现。但是,Linux下的R CMD CHECK
生成一个关于全局变量Filters
没有可见绑定的注释。即使这只是一个注释,我也被要求通过创建特定于平台的功能来修复它,以便在Linux下永远不会看到choose.files()
分支。我怎么能这样做?
fileNames <- function() {
files <- character(0)
if(interactive() && (.Platform$OS.type == "windows")) {
myFilt <- rbind(Filters, txtCsvDat=c("Data files (*.txt, *.csv, *.dat)",
"*.txt;*.csv;*.dat"))
files <- choose.files(filters=myFilt[c("txtCsvDat", "All"), ], index=1)
}
return(files)
}
答案 0 :(得分:3)
使用get
应该修复它:
get("Filters")
答案 1 :(得分:2)
特定于操作系统的代码通常看起来不是一个好主意,但您可以使用子目录来定义函数
MyPkg/R/windows/fileName.R
如有必要(例如,因为您不在非Windows上实现fileName),请在DESCRIPTION文件中包含条件归类顺序
Collate.unix: shared.R
Collate.windows: shared.R windows/fileName.R
并在NAMESPACE文件中安排条件导出(如果需要,再次安排)
if (.Platform$OS.type == "windows")
export(fileName)
RShowDoc("R-exts")
中记录了条件整理(第1.1.1节,搜索Collate.windows);我不确定NAMESPACE文件中是否存在允许语法的良好引用。 NAMESPACE方法用于parallel包。