r - 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 {
}
}
解决方案
“最好”是有争议的,但在大多数情况下,最好的做法确实是快速失败。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]]
}
推荐阅读
- c# - 使用类名字符串来新建一个类
- selenium - 如何使用 selenium firefoxdriver 保存 cookie
- powershell - 测量对象以将整数对象相加
- cocoa - 为什么 Carbon 菜单管理器在 64 位 Cocoa 应用程序中工作
- node.js - npm install 挂在随机包上
- java - Elasticsearch:新 Java API 版本中的 IndicesQuery
- react-native - 你能建议我一个允许在 react-native 中显示用户应用程序功能的模块吗?
- javascript - 以引号开头但不以转义字符开头的字符串的正则表达式
- tensorflow - 在单独的会话中保存模型和加载模型会给出错误的预测
- c - openmp argmin 实现比 numpy 慢得多,我该如何解决这个问题?