是否可以在包的Description文件中包含“条件导入”?
例如,我正在开发一个计划系统任务的程序包。在Windows上,这是通过Task Scheduler和taskscheduleR
程序包来实现的,而在UNIX上是通过cronR
程序包来实现的。因此从直觉上讲,执行以下操作将很有用:
DESCRIPTION
Package: pkgname
Version: 0.0.1
[more fields]
Imports:
dplyr,
if (.Platform$OS.type == "windows") "taskscheduleR" else "cronR",
tidyr
我想可以编写一个.onAttach()
或类似的代码来检查系统类型并安装相关的软件包(如果尚不存在的话),但这似乎不是一个特别好的解决方案-首先,它< em>依赖,用户必须先将其连接到网络,然后才能使用它,然后断开正式的依赖链。
我目前的做法是将两个软件包都包含在Suggests
中,然后由用户负责为他们的系统安装正确的软件包。
答案 0 :(得分:1)
我认为使用configure
shell脚本可以实现这一点,如编写R扩展中所述。但是我没有这样做的经验。您还可以在NAMESPACE文件中进行平台相关的操作(此处无济于事,但请参见基本软件包 parallel 的源代码)。
您可以通过使用"The R and man subdirectories may contain OS-specific subdirectories named unix or windows."来帮助您的用户,这使您可以拥有特定于操作系统的代码,然后可以对软件包的可用性进行常规检查。
例如,在Windows子目录中,您将拥有类似的内容:
if (requireNamespace("taskscheduleR", quietly = TRUE)) {
taskscheduleR::taskscheduler_create(...)
} else {
stop("Please install the taskscheduleR package to use this functionality")
}