r - 使用对话框的函数错误地执行错误的语句
问题描述
我正在编写一个函数,它将 R 会话连接到多个 Oracle 数据库之一。在此函数中,用户必须始终输入他们的用户名和密码,但可能不需要输入主机名/端口号,这取决于这些参数是否已编程到函数中。如果函数中不包含主机/端口,则会提示用户手动输入这些参数。
无论出于何种原因,我的函数错误地执行了错误的语句并强制用户输入主机名/端口号,尽管他们使用的是预编程的数据库。有谁知道为什么会这样?现在让我发疯...
请参阅下面的示例代码。出于某种原因,唯一正确执行的是最后一个数据库 (DB4)。
library(svDialogs)
library(getPass)
db_function <- function(database) {
login_1 <- dlg_input(message = paste("Input", database, "Username:"), Sys.info()["login_1"])$res
login_2 <- getPass(msg = paste("Input", database, "Password:"))
if(database == "DB1") {
host <- "host1"
port <- 9999
}
if(database == "DB2") {
host <- "host2"
port <- 9999
}
if(database == "DB3") {
host <- "host3"
port <- 9999
}
if(database == "DB4") {
host <- "host4"
port <- 9999
}
else {
host <- dlg_input(message = paste("Input", database, "Host Name:"),
Sys.info()["host"])$res
port <- dlg_input(message = paste("Input", database, "Port Number:"),
Sys.info()["port"])$res
}
connect_string <- paste(
"(DESCRIPTION=",
"(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",
"(CONNECT_DATA=(SERVICE_NAME=", database, ")))", sep = "")
}
## executes incorrectly (programmed but still prompted to input manually)
db_function("DB3")
## executes correctly (programmed and not prompted to input manually)
db_function("DB4")
## executes correctly (not programmed, so prompted to input manually)
db_function("DB5")
非常感谢任何人对此提供的任何帮助!
解决方案
如前所述,这应该解决它
library(svDialogs)
library(getPass)
db_function <- function(database) {
login_1 <- dlg_input(message = paste("Input", database, "Username:"), Sys.info()["login_1"])$res
login_2 <- getPass(msg = paste("Input", database, "Password:"))
if(database == "DB1") {
host <- "host1"
port <- 9999
} else
if(database == "DB2") {
host <- "host2"
port <- 9999
} else
if(database == "DB3") {
host <- "host3"
port <- 9999
} else
if(database == "DB4") {
host <- "host4"
port <- 9999
}
else {
host <- dlg_input(message = paste("Input", database, "Host Name:"),
Sys.info()["host"])$res
port <- dlg_input(message = paste("Input", database, "Port Number:"),
Sys.info()["port"])$res
}
connect_string <- paste(
"(DESCRIPTION=",
"(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",
"(CONNECT_DATA=(SERVICE_NAME=", database, ")))", sep = "")
}
## executes incorrectly (programmed but still prompted to input manually)
db_function("DB3")
## executes correctly (programmed and not prompted to input manually)
db_function("DB4")
## executes correctly (not programmed, so prompted to input manually)
db_function("DB5")
推荐阅读
- django - 我是 cron 和 scrapy 的新手。// cron 在 AWS 中不起作用。(在我当地的环境中很好)
- python-3.x - 华氏或摄氏 Python 程序不断重复
- swift - 在 Swift 中生成带有属性的 XML 元素
- python - Python 请求库返回 html 而不是 json
- python - 如何检查 Pandas DataFrame 的稀疏性?
- c# - Newtonsoft.Json 序列化从 Net Core 3.1 中的 JwtPayload 对象返回空值
- regex - Remove \ " and \n using sed
- .net - 访问 Azure 存储帐户中的所有队列
- google-apps-script - 将带有 urlFetchApp 的文件发布到谷歌网络应用程序
- git - 如何删除已发布的分支而不在 github 控制台上创建拉取请求