需要预处理功能输入

时间:2018-11-14 18:31:28

标签: r functional-programming

我正在编写一个带有一组函数的软件包,这些函数采用适合模型的对象(例如,从“ lmt”,“ lavaan”或“ mirt”软件包的输出)并基于这些模型计算相关索引。 / p>

此套件中每个函数要做的第一件事就是将输入转换为标准化形式,因此我所有的函数如下所示:

fooIndex <- function(x) {
  x <- standardizerFunction(x)
  # Now, compute the fooIndex
}

在这里,standardizerFunction是一个S3泛型函数,具有用于所有受支持输入类的方法。

比在每个计算索引的函数中调用standardizerFunction更好的方法来实现此功能吗?

编辑:我只是想说明我的“问题”是,将同一行代码复制并粘贴到约20个不同的函数中似乎是一种不良的编程风格,我希望有一个更好的解决方案。

1 个答案:

答案 0 :(得分:0)

根据iod和Gregor编写的内容,两种解决方法是:

(1)要求用户在运行任何主要功能之前应用standardizerFunction。如果输入的类错误,则这些函数将引发错误。

(2)由于我们的函数将一直检查输入以确保它是正确的类,因此只需使用以下方法将standardizerFunction折叠到输入检查部分:

if(!inherits(x, what="YourClass")) standardizerFunction(x)

在我的特定设置中,由于我的大多数用户对R都不满意,因此要求他们预先应用standardizerFunction并不是最佳选择,因此我将选择选项2。