为什么sqldf的语法是错误的
why the syntax of sqldf is wrong
我尝试select以R语言(3.6)的批处理方式从数据框中获取特定数据,但失败了。
当我使用
sqldf("select * from Interact where miRNA = 'hsa-miR-510-5p' and
Seqname ='chr3:195780289-195787118-' ")
结果还不错。
虽然我尝试了
sqldf("select * from Interact where miRNA = Interpairs[1,1] and
Seqname =Interpairs[1,2]"),
或
sqldf('select * from Interact where miRNA = Interpairs$microRNA[1] and
Seqname = Interpairs$circRNA[1]')
原来是错的。
Error in result_create(conn@ptr, statement) : near "[1]": syntax error
不知道有没有人能帮忙解答一下?
传递给 sqldf
的字符串必须是 SQL。您可以做的是通过在 sqldf
前面加上 fn$
插入相关内容,如图所示,然后反引号内的代码将由 R 执行,并且其输出在该点之前替换为 sql 字符串将字符串传递给 sqldf
.
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
将替换变量的内容,前提是变量名称不包含某些特殊字符:
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 github 主页上有几个这样的例子:https://github.com/ggrothendieck/sqldf
关于 fn$
的信息也可以通过 ?fn
找到。请注意,这是一个通用工具,适用于几乎所有功能,而不仅仅是 sqldf
。例如,
w <- "world"
fn$cat("Hello, $w\n")
## Hello, world
我尝试select以R语言(3.6)的批处理方式从数据框中获取特定数据,但失败了。
当我使用
sqldf("select * from Interact where miRNA = 'hsa-miR-510-5p' and
Seqname ='chr3:195780289-195787118-' ")
结果还不错。
虽然我尝试了
sqldf("select * from Interact where miRNA = Interpairs[1,1] and
Seqname =Interpairs[1,2]"),
或
sqldf('select * from Interact where miRNA = Interpairs$microRNA[1] and
Seqname = Interpairs$circRNA[1]')
原来是错的。
Error in result_create(conn@ptr, statement) : near "[1]": syntax error
不知道有没有人能帮忙解答一下?
传递给 sqldf
的字符串必须是 SQL。您可以做的是通过在 sqldf
前面加上 fn$
插入相关内容,如图所示,然后反引号内的代码将由 R 执行,并且其输出在该点之前替换为 sql 字符串将字符串传递给 sqldf
.
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
将替换变量的内容,前提是变量名称不包含某些特殊字符:
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 github 主页上有几个这样的例子:https://github.com/ggrothendieck/sqldf
关于 fn$
的信息也可以通过 ?fn
找到。请注意,这是一个通用工具,适用于几乎所有功能,而不仅仅是 sqldf
。例如,
w <- "world"
fn$cat("Hello, $w\n")
## Hello, world