RMySQL:as.character.default() 中的错误:

RMySQL: Error in as.character.default() :

我正在尝试在 R 中使用以下函数:

 heritblup <-  function(name) {
      library(RMySQL)
      library(DBI)
      con <- dbConnect(RMySQL::MySQL(),
                       dbname ="mydab",
                       host      = "localhost",
                       port  = 3306,
                       user  = "root",
                       password = "")
      value1 <- 23;
      rss<- paste0 ("INSERT INTO namestable 
                    (myvalue, person) 
                    VALUES ('$value1', '",name,"')")
      rs <<- dbGetQuery (con, rss)
    }

heritblup("Tommy")

但我不断收到此错误:

Error in as.character.default() : no method for coercing this S4 class to a vector Called from: as.character.default()

我试图将粘贴功能更改为: rss<- paste0 ("插入名称表 (我的价值,人) VALUES ($value1, ",name,")")

错误仍然存​​在; 我不知道怎么了。 请帮忙

代码中的几个问题。我不确定 OP 是在尝试 insert 数据库中的记录还是从数据库中获取。

假设,根据查询,他希望在数据库中插入数据 table。

规则是在 R 中准备查询的方式与在 MySQL 中执行的方式相同。值替换(如果有的话)应该在 R 中执行,因为 MySQL 引擎不会对来自 R 的变量有任何想法。

因此,查询准备步骤应按以下方式完成:

rss <- sprintf("INSERT INTO namestable (myvalue, person) VALUES (%d, '%s')", value1, name)
# "INSERT INTO namestable (myvalue, person) VALUES (23, 'test')"

如果数据插入是目标,那么 dbGetQuery 不是每个 R 文档的正确选项,而是 dbSendStatement() 应该用于数据操作。帮助中的参考建议:

However, callers are strongly encouraged to use dbSendStatement() for data manipulation statements.

基于该查询执行行应该是:

rs <- dbSendStatement(con, rss)
ret_val <- dbGetRowsAffected(rs)
dbClearResult(rs)
dbDisconnect(con)
return(ret_val)