r - 使用RSQLite的R中分类变量的where子句

标签 r sqlite

我正在使用RSQLite访问简单的SQLite数据库以返回定义的数据集。我希望能够限制查询,以便通过限制类别字段仅返回数据的子集。

我编写了一个函数,希望能够提供在where子句中使用的参数,但是当我以值作为参数运行该函数时,我不断收到“对象'AAPL'发现错误” (其中参数为AAPL)。

通过硬编码要在函数中限制的值,它可以正常工作,运行f2(5)将返回'AAPL'的前5行

f2 <- function(n, stockName) {

  library(RSQLite)

  conSQLiteParallel <- dbConnect("SQLite", dbname="stocks.sqlite")
  ## this sql works fine
  sqlcmdParallel <- paste("SELECT stock, gain ",
      "FROM stock_gains ",
      "WHERE day <=", n, " and stock ='AAPL'", sep="")
  resultsHandleParallel <- dbSendQuery(conSQLiteParallel, sqlcmdParallel)

  d <- fetch(resultsHandleParallel)
}

results <- f2(5)


但是,当我尝试使用stockName变量将值传递给函数时,它给了我

f2 <- function(n, stockName) {

    library(RSQLite)
    conSQLiteParallel <- dbConnect("SQLite", dbname="stocks.sqlite")
    ## this sql does not work correctly, but only gives an error 
    ## when running the function
    sqlcmdParallel <- paste("SELECT stock, gain ",
        "FROM stock_gains ",
         "WHERE stock =", stockName, sep="")
    resultsHandleParallel <- dbSendQuery(conSQLiteParallel, sqlcmdParallel)

    d <- fetch(resultsHandleParallel)
}

results <- f2(5,APPL) - gives the error "Error in paste("SELECT stock, gain FROM stock_gains WHERE stock =", stockName,  : 
  object 'APPL' not found"

results <- f2(5,'APPL') - gives the error "Error in sqliteExecStatement(conn, statement, ...) : 
  RS-DBI driver: (error in statement: no such column: APPL) "

results <- f2(5,distinctStocks[1,1]) - gives the error "Error in sqliteExecStatement(conn, statement, ...) : 
  RS-DBI driver: (error in statement: no such column: AAPL) "


如有任何帮助,我们将不胜感激,不胜感激。

最佳答案

stockName应该用引号引起来:

paste0("SELECT stock, gain FROM stock_gains WHERE day <= ", n, 
       " and stock = '", stockName, "'")


这也应该起作用:

library(gsubfn)
fn$identity("SELECT stock, gain 
             FROM stock_gains 
             WHERE day <= $n and stock = '$stockName'")

关于r - 使用RSQLite的R中分类变量的where子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23848833/

相关文章:

c# - 在 SQLite 数据库中创建两个表之间的关系

r - 无法将 selectInput 传递到 r Shiny 的输出$表摘要

r - 如何根据变量大小而不是层大小计算 geom_flow() 中的百分比

java - 无法从 sqlite 查询中获取选择列 3

c# - 数据库存在失败的 SQLite 操作(.NET 4.0、EF 4.4)

android - 使用 SQLiteDatabase 从多个表进行 SQLite 查询

r - all.equal() 的公差参数是如何工作的?

r - 创建数据框 R 时合并两个列表

r - 自动重新计算和同步数据框中的计算列

java - 对多个数据库使用单个 JDBC 连接