Я пишу функцию, которая подключит сеанс R к одной из нескольких Oracle баз данных. В рамках этой функции пользователь должен всегда вводить свое имя пользователя и пароль, но может не вводить имя хоста / номер порта в зависимости от того, запрограммированы ли эти параметры в функцию. , Если хост / порт не включен в функцию, пользователю будет предложено ввести эти параметры вручную.
По какой-то причине моя функция ошибочно выполняет ложные операторы и заставляет пользователя вводить имя хоста. / номера портов, несмотря на то, что они используют предварительно запрограммированную базу данных. У кого-нибудь есть идеи, почему это происходит? Сводить меня с ума прямо сейчас ...
Пример кода приведен ниже. По какой-то причине, only тот, который выполняется правильно, является последней базой данных (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")
Большое спасибо за любую помощь, которую кто-либо может предложить в этом!