我正在R
(3.4.3)开发一个包含一些内部数据的包,我希望能够让用户刷新它而不必做太多工作。但让我更具体一点。
该软件包包含多个依赖于多个参数的函数,但我实际上只是导出完成所有工作的包装函数。因为有大量参数要传递给那些包装器函数,所以我将它们放在.csv
文件中并将它们作为列表传递。因此,数据是一个名为.csv
的简单param.csv
文件,其中一列中的参数名称及下一列中的值
parameter_name,parameter_value
ticker, SPX Index
field, PX_LAST
rolling_window,252
upper_threshold,1
lower_threshold,-1
signal_positive,1
signal_neutral,0
signal_negative,-1
我处理它正在运行
param.df <- read.csv(file = "param.csv", header = TRUE, sep = ",")
param.list <- split(param.df[, 2], param.df[, 1])
我将列表放在包中,如下所示
usethis::use_data(param.list, overwrite = TRUE)
然后,重置R
交互式窗口并执行
devtools::document()
devtools::load_all()
devtools::install()
require(pkg)
一切都很好,数据可用,可以传递给函数。
第一个问题:当我更改
param.csv
时,保存并重复上述四行代码,内部param.list
不会更新。这里有什么我想念的吗?或者,每当他更改数据来源的usethis::use_data(param.list, overwrite = TRUE)
文件时,包的开发人员应该运行.csv
本质上是什么?
因为它是一种地图,用户需要调整(手动)模型校准的参数。为了尝试解决这个问题,我让用户使用自己的参数列表(如前所述的.csv
文件)提供函数。我有一个函数get_param_list("path/to/file.csv")
,它执行与上面完成的完全相同的处理并返回列表。它允许用户传递自己的参数列表。 事实上,内部数据param.list
被视为默认参数设置。
第二个问题:我想让用户在安全>> 安全包中修改默认参数列表
param.list
way。
因此,由于内部对象是一个列表,因此用户只需从包外部修改列表中所选元素。但这在我看来非常危险,因为用户可以 - 忘记参数,所以我在这种情况下的函数内部有默认值 - 用另一种可能引起错误或更糟的副作用的类型替换参数。
有没有办法让用户在不打开包的情况下修改内部参数列表?例如,我曾考虑过一个可以用用户提供的新文件替换.csv
文件的函数,但这让我回到第一个问题,当我重新启动R提示并重新安装软件包时,除非发生任何事情,否则不会发生任何事情。我从包里面usethis::use_data(param.list, overwrite = TRUE)
。另一种类型的数据会更有用(例如,将数据设为内部数据)吗?
这是我在这个网站上的第一个问题,但我发现它很长,可能会被视为编码风格的问题。但是,如果有人能够从R
那里看到一个明显的错误或对包装开发的误解,那将对我有所帮助。
干杯