首页 > 解决方案 > R函数上未定义的字符串参数

问题描述

我正在开发的包中有一个 r 函数,格式如下,它根据参数 arg1 下载并返回数据帧。arg1 只能是选项“datatype1”或“datatype2”之一。当前,当为 arg1 输入任何其他值时,该函数将返回 NULL。通知用户这是一个无效参数并处理 else 块的最佳方法是什么?

output_data <- function(arg1 = "datatype1"){
    if(arg1 == "datatype1){
        return(dt1)
    } else if (arg1 == "datatype2"){
        return(dt2)
    } else {
    }
}

标签: rfunction

解决方案


“最好”是有争议的,但在大多数情况下,最好的做法确实是快速失败stop因此,一个不错的选择是通过或其相对项抛出错误stopifnot

output_data <- function(arg1 = "datatype1"){
    stopifnot(arg1 %in% paste0("datatype", 1 : 2))
    if (arg1 == "datatype1") {
        dt1
    } else if (arg1 == "datatype2") {
        dt2
    }
}

(请注意,我已从您的代码中删除了无关的return函数调用。)

也就是说,此尝试包含大量冗余代码,当您拥有更多数据集时,这些代码会变得更多。为什么不使用列表查找:

datasets = list(datatype1 = dt1, datatype2 = dt2)

output_data = function (which) {
    stopifnot(which %in% names(datasets))
    datasets[[which]]
}

推荐阅读