我正在编写一个带有一组函数的软件包,这些函数采用适合模型的对象(例如,从“ lmt”,“ lavaan”或“ mirt”软件包的输出)并基于这些模型计算相关索引。 / p>
此套件中每个函数要做的第一件事就是将输入转换为标准化形式,因此我所有的函数如下所示:
fooIndex <- function(x) {
x <- standardizerFunction(x)
# Now, compute the fooIndex
}
在这里,standardizerFunction是一个S3泛型函数,具有用于所有受支持输入类的方法。
比在每个计算索引的函数中调用standardizerFunction更好的方法来实现此功能吗?
编辑:我只是想说明我的“问题”是,将同一行代码复制并粘贴到约20个不同的函数中似乎是一种不良的编程风格,我希望有一个更好的解决方案。
答案 0 :(得分:0)
根据iod和Gregor编写的内容,两种解决方法是:
(1)要求用户在运行任何主要功能之前应用standardizerFunction。如果输入的类错误,则这些函数将引发错误。
(2)由于我们的函数将一直检查输入以确保它是正确的类,因此只需使用以下方法将standardizerFunction折叠到输入检查部分:
if(!inherits(x, what="YourClass")) standardizerFunction(x)
在我的特定设置中,由于我的大多数用户对R都不满意,因此要求他们预先应用standardizerFunction并不是最佳选择,因此我将选择选项2。