R description文件:是否可以“有条件地”导入软件包?

时间:2019-10-14 12:40:50

标签: r package r-package

是否可以在包的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中,然后由用户负责为他们的系统安装正确的软件包。

1 个答案:

答案 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")
   }