我正在Shiny中开发一个问卷,该问卷使用RadioButtons收集一些用户数据,并根据用户选择的值生成可视化。
我正试图将单选按钮的选择值存储在亚马逊AWS上托管的MySQL数据库中。我一直在关注Dean Attali的文章,以使其发挥作用。
除了单选按钮中的选择值没有正确插入数据库之外,一切都很好。我试图将所有这些值存储为";文本";在MySQL数据库中键入。
以下是我正在使用的代码。
假设我有一个ui.R
,其中我定义了3个radioButtons
,称为dt_ds_q1
、dt_ds_q2
和dt_ds_q3
。根据用户选择,这些radioButtons
提供值0
或1
。
以下是我在数据库中用于插入的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")