首页 > 解决方案 > 从包中外部设置函数的默认参数

问题描述

我正在构建一个包含具有默认参数的函数的包。导入函数后,我想找到一种干净的方法来设置默认参数的值。

我的第一次尝试是将默认值设置为未知对象(在包内)。然后当我加载包时,我会有一个外部脚本,它会为未知对象分配一个值。

但它看起来不是很干净,因为我正在编译一个带有未知对象的函数。

我的问题是我需要其他人来使用这些函数,并且由于他们有很多参数,我希望使代码尽可能简洁。在运行程序之前,可以通过配置脚本设置许多参数。

因此,例如,我在我的包中定义:

function_try <- function(x = VAL){
return(x)
}

我编译包并加载它,然后我有一个外部脚本(或从配置文件中读取)

VAL <- "hello"

然后该功能的用户可以运行

function_try()

标签: rargumentsconfigdefaultr-package

解决方案


我会用options它。所以你的函数看起来像:

function_try <- function(x = getOption("mypackage.default.value")) x

在您的外部脚本中,您确保设置了选项值:

options(mypackage.default.value = "hello")

恕我直言,这是一个干净的解决方案,因为任何阅读您的函数的人都会第一眼看到某个选项值被用作默认值,并且还清楚地了解如何在需要时覆盖该值。

我还将在您的库中定义一个备用值,onLoad以确保首先定义该值。然后,您甚至可以在您的函数中对此后备值做出反应,并在函数意识到外部脚本出于某种原因未提供新值时发出有意义的警告。


推荐阅读