【问题标题】:How to use paste function and quotes, in a for loop and insert statement如何在 for 循环和插入语句中使用粘贴函数和引号
【发布时间】:2015-10-06 12:35:54
【问题描述】:

通过 R 语言for 循环,我尝试使用 insert 语句 将行保存在表中: 一行示例如下所示:

NUMPAT   NAME       FIRSTNAM     BIRTHDATE     SEX    DATPREL      ADICAP1   IDPAT   NUMERORUM 
 1       ELOSTE      JAMES      2003-09-27      1    2008-03-24    BHOTE4P1   468        2

我想写的是:

 info<- paste("INSERT INTO tab_anapath_std1 VALUES (",matOp[i,1],", \",matOp[i,2],\",\",matOp[i,3], \",",matOp[i,4],",",matOp[i,5],",",matOp[i,6],",\",matOp[i,7],\",",matOp[i,8],",",matOp[i,9],")")
 sql_update_tbl_ds <- fn$dbSendQuery(dbconn, info)

我得到的输出是:

 NUMPAT   NAME       FIRSTNAM       BIRTHDATE     SEX    DATPREL      ADICAP1      IDPAT     NUMERORUM   
1    ,matOp[i,2],    ,matOp[i,3],    0000-00-00    1    0000-00-00   ,matOp[i,7],    468       2

我在管理 quotes 方面遇到了真正的问题;我什至尝试过改变但没有成功; 请问怎么写?

【问题讨论】:

  • 输出应该是什么样的?您能否将其添加到示例中?

标签: mysql r for-loop quotes rmysql


【解决方案1】:

尝试使用sprintf 函数进行此操作。

info <- sprintf("INSERT INTO tab_anapath_std1 VALUES ('%s', '%s', '%s', '%d', '%s', '%s', '%d', '%d')", matOp[i, 1], matOp[i, 2], matOp[i, 3], matOp[i, 4], matOp[i, 4], matOp[i, 5], matOp[i, 6], mat[i, 7], mat[i, 8], mat[i, 9])

【讨论】:

  • 应用您的建议,收到此错误消息:
    Error in sprintf("INSERT INTO... &lt;br/&gt; incorrect format '% d'; use the format% s for character objects
  • 如果是字符串则使用 %s,如果是整数则使用 %d。
【解决方案2】:

如果您使用fn$,则无需使用pastefn$paste 的替代品。只需写出字符串,然后在要插入 R 代码的任何位置用反引号将该 R 代码括起来。这是一个使用 fn$ 的自包含示例,它利用内置的 BOD 数据框。

library(sqldf)
matOp <- matrix(1:4, 1, 4)
i <- 1

sql <- "select * from BOD where Time = `matOp[i, 4]`"

fn$identity(sql)
## [1] "select * from BOD where Time = 4"

fn$sqldf(sql)
##   Time demand
## 1    4     16

【讨论】:

  • 采纳你的建议,我就是这样做的:
  • 应用你的建议,这是我所做的:>reqSql &lt;- "INSERT INTO tab_anapath_std VALUES (matOp[i, 1],\"matOp[i, 2],matOp[i, 3], matOp[i, 4],matOp[i, 5],matOp[i, 6],matOp[i, 7],matOp[i, 8],matOp[i, 9 ],matOp[i, 10],matOp[i, 11],matOp[i, 12],matOp[i, 13])" sql_update_tbl_ds &lt;- fn$dbSendQuery(dbconn, reqSql) 这是错误信息:could not run statement: You have an error... near '"ELOSTE,JAMES.. Like you可以看到我使用了反引号,但我遇到了同样的错误
  • 请通过显示 imatOp[i,]fn$identity(reqSql) 的值来使其可重现,并将其放入问题中,而不是 cmets,因为 SO 显然会弄乱您评论中的文本,因为事实上,反引号在 SO cmets 中使用时具有特殊含义。可能是您没有按要求正确引用您的数据,但我们无法确定,因为评论中发布的内容非常混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 2014-02-17
相关资源
最近更新 更多