首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqldf语法错误的原因

sqldf语法错误的原因
EN

Stack Overflow用户
提问于 2019-05-23 02:06:01
回答 1查看 214关注 0票数 0

我尝试用R语言(3.6)的批处理方式从数据帧中选择特定数据,但失败了。

当我用

代码语言:javascript
复制
sqldf("select * from Interact where miRNA = 'hsa-miR-510-5p' and
       Seqname ='chr3:195780289-195787118-' ")

结果没问题。

当我试着

代码语言:javascript
复制
sqldf("select * from Interact where miRNA = Interpairs[1,1] and 
       Seqname =Interpairs[1,2]"), 

代码语言:javascript
复制
sqldf('select * from Interact where miRNA = Interpairs$microRNA[1] and 
      Seqname = Interpairs$circRNA[1]')

结果证明是错的。

Result_create中的错误(conn@ptr,语句):接近"1":语法错误

我想知道有没有人能帮我解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-23 03:53:49

传递给sqldf的字符串必须是SQL。您可以做的是插入相关内容,如图所示,将sqldf前缀为fn$,然后R将执行反引号中的代码,并在将字符串传递给sqldf之前将其输出替换到sqldf字符串中。

代码语言:javascript
复制
library(sqldf)
DF <- data.frame(a = 'x', b = 'y', stringsAsFactors = FALSE) # test data

fn$sqldf("select * from DF where a = '`DF$a[1]`' and b = '`DF$b[1]`' ")
##   a b
## 1 x y

fn$sqldf("select * from DF where a = '`DF[1,1]`' and b = '`DF[1,2]`' ")
##   a b
## 1 x y

此外,如果变量名不包含某些特殊字符,$variable将替换变量的内容:

代码语言:javascript
复制
a <- DF$a[1]
b <- DF$b[1]
fn$sqldf("select * from DF where a = '$a' and b = '$b' ")
##   a b
## 1 x y

如果希望看到实际传递给sqldf的字符串,那么将verbose = TRUE参数添加到上述任何sqldf调用中。

更多信息

在sqldf主页上有几个例子:https://github.com/ggrothendieck/sqldf

关于fn$的信息也可以通过?fn找到。请注意,这是一个通用工具,可用于任何函数,而不仅仅是sqldf。例如,

代码语言:javascript
复制
w <- "world"
fn$cat("Hello, $w\n")
## Hello, world
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56267177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档