警告:result_create中的错误:没有这样的列:tmp

时间:2018-07-24 05:40:38

标签: r sqldf

我正在R中的Shiny中使用sqldf运行数据库查询。但是出现错误。

ui.R:

  observeEvent (input$uploadForTest_1, {
    inFile=input$uploadForTest_1
    inFileName=input$uploadForTest_1$name
    file <-"tss.txt"
    tmp = paste("audio/street", inFileName, sep = "/")
    res <- read.csv.sql(file,header=FALSE,sql = "select * from file where V1=tmp",sep="\t")
    print(res)
  })

我成功运行了以下查询:

res <- read.csv.sql(file,header=FALSE,sql = "select * from file where V1='audio/street/b098.wav'",sep="\t")

但是,如果我运行ui.R中提到的查询,则会出现错误,提示tmp列不存在:

  

警告:result_create中的错误:没有这样的列:tmp 86:

我不想在查询中使用字符串。我想使用变量名。因为我不想在查询中对字符串进行硬编码。我可以在查询中使用变量名而不是字符串吗?如果是,那我该怎么办?我没有在Internet上找到解决问题的方法。谢谢。

2 个答案:

答案 0 :(得分:2)

read.csv.sql前加上fn$,并在SQL语句中使用'$tmp'

fn$read.csv.sql(file, sql = "select * from file where V1 = '$tmp'", 
  header = FALSE, sep = "\t")

有关更多信息,请参见?fn和gsubfn小插图。请注意,sqldf会自动加载gsubfn软件包,因此该软件包将已经可用。

答案 1 :(得分:1)

您可以使用sprintf。另一个选择是将字符串粘贴在一起,但是我发现sprintf可以轻松完成此任务。

> tmp <- "audio/street/somefile.txt"
> tmp <- "audio/street/somefile.txt"
> "select * from file where V1=tmp"
[1] "select * from file where V1=tmp"

> sprintf("select * from file where V1='%s'", tmp)
[1] "select * from file where V1='audio/street/somefile.txt'"