R包:创建特定于平台的功能

时间:2014-01-09 23:38:33

标签: r

我正在开发一个带有函数的R-package,该函数应该返回带有完整路径的文件名,方法是给出路径和几个文件名,或者 - 如果在Windows下以交互模式 - 通过打开文件浏览器choose.files()仅显示以csvdattxt结尾的文件。

由于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)
}

2 个答案:

答案 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节,搜索Collat​​e.windows);我不确定NAMESPACE文件中是否存在允许语法的良好引用。 NAMESPACE方法用于parallel包。