sch*_*dst 6 mysql r rmysql shiny r-dbi
我用R 的闪亮包创建了一个在线实验.假设我有3个被称为"折腾","决定" 和" 评级"的反应值.
此外,我在亚马逊网络服务RDS上推出了一个MySQL数据库.版本是MySQL 5.6.22.
我成功地设法将非反应值(如时间戳)发送到MySQL数据库.所以我假设问题是在Server.R代码中找到与MySQL对话的代码.对于非反应值,当代码在响应服务器功能之外(之前)时,它可以很好地工作.但是对于反应值,我认为它应该在某个地方.
我试过这段代码:
Server.R
library(shiny)
library(RMySQL)
library(DBI)
con <- dbConnect(MySQL(), dbname="db", username="myname", password="mypassword", host="myhost.com", port=xxxx)
function(input, output, session){
sql <- reactive({
paste("insert into scenario1 (toss, dec, rat, timestamp)
values (",input$toss,",",input$decision,",",input$rating,"now())")
})
result<-reactive({dbSendQuery(con, sql())})
}
Run Code Online (Sandbox Code Playgroud)
这样,我没有收到错误消息.所以错误可能在insert into-code中.
另外,我不确定我使用的包装是否适用于此目的.我尝试了很多东西.每当我通过将其保留在SQL-quote之外来添加一个无效值时它就会停止工作.我开始认为RMySQL缺少这个功能.insert into手册中没有任何内容.
有人能够发现我犯的错误吗?
最后,我可以使用以下代码运行查询:
writingMarks <- function(input){
con <- dbConnect(MySQL(), dbname="db", username="myname", password="mypassword",
host="myhost.com", port=xxxx)
result <- sprintf<-("insert into scenario1 (toss, dec, timestamp) values (%s,%s,%s)",
input$toss, input$decision, "now()")
dbSendQuery(con, result)
}
Run Code Online (Sandbox Code Playgroud)
我无法运行paste查询。使用sprintf逗号可以减少混淆。
而且,是的,我确实必须添加一个isolate(). 我将它插入到一个observe(). 所以它看起来像这样:
observe({
if (input$condition==1){
isolate({
writingMarks(input)
})
}
return()
})
Run Code Online (Sandbox Code Playgroud)