r语言 - Shiny 的单选按钮选择值未正确存储在 MySQL 数据库中



我正在Shiny中开发一个问卷,该问卷使用RadioButtons收集一些用户数据,并根据用户选择的值生成可视化。

我正试图将单选按钮的选择值存储在亚马逊AWS上托管的MySQL数据库中。我一直在关注Dean Attali的文章,以使其发挥作用。

除了单选按钮中的选择值没有正确插入数据库之外,一切都很好。我试图将所有这些值存储为";文本";在MySQL数据库中键入。

以下是我正在使用的代码。

假设我有一个ui.R,其中我定义了3个radioButtons,称为dt_ds_q1dt_ds_q2dt_ds_q3。根据用户选择,这些radioButtons提供值01

以下是我在数据库中用于插入的server.R的片段:

# Define the fields that need to be saved.
fields <- c("dt_ds_q1", "dt_ds_q2", "dt_ds_q3")
# Function for Saving Data on MySQL.
saveDataMySQL <- function(data, unique_id, session_id) {
# Connect to the database
db <- dbConnect(MySQL(), 
dbname = databaseName, 
host = options()$mysql$host, 
port = options()$mysql$port, 
user = options()$mysql$user, 
password = options()$mysql$password)

# Concatenating UniqueID, SessionID, and Timestamp
data <- as.data.frame(t(data))
dt <- data %>% add_column(unique_id = unique_id, 
session_id = session_id,
timestamp = Sys.time())

# Construct the update query by looping over the data fields
query <- sprintf(
"INSERT INTO %s (%s) VALUES ('%s')",
table, 
paste(names(dt), collapse = ", "),
paste(dt, collapse = "', '")
)

# Submit the update query and disconnect
dbGetQuery(db, query)
dbDisconnect(db)
}
shinyServer(function(input, output) {
# Get form data from questionnaire
formData <- reactive({
data <- sapply(fields, function(x) input[[x]])
data
})
# Save data when someone clicks on the navbar title.
observeEvent({
input$ati == "NAVBARNAME"
},
saveDataMySQL(formData(), unique.id(), session.id()))
})

我得到的输出如下图所示。

输出屏幕截图

但是,所需的输入应该具有值1或0。

提前感谢您的帮助。

我解决了这个问题。在函数saveDataMySQL()的定义中,我不必要地将列表formData()转换为data.frame。以下是解决了我的问题的更新代码(在saveDataMySQL()方法的定义内:

# Adding unique ID, session ID and timestamp to list
data <- c(data, unique_id, session_id, Sys.time())

# Construct the update query by looping over the data fields
query <- sprintf(
"INSERT INTO %s (%s) VALUES ('%s')",
table, 
paste(fields_all, collapse = ", "),
paste(dt, collapse = "', '")
)

其中,fields_all是列名列表,我将其明确定义为:

fields_all = c("dt_ds_q1", "dt_ds_q2", "dt_ds_q3", "unique_id", "session_id", "timestamp")

最新更新