我试图在r中循环dbtool命令,同时处理我的模式文件,逐个删除元素,并将它们存储在每个元素的单独文件中。
library("RSQLite")
sqlite <- dbDriver("SQLite")
dbname <- "models_signif.db"
db = dbConnect(sqlite,dbname)
brain_n <- dbGetQuery(db,"SELECT * FROM weights")
x <- which(brain_n$gene %in% "ENSG00000130943.6")
rsid_list <- brain_n$rsid[x]
##now loop for generating the files
for( i in 1:128){
#copy original file db to another
#use that for modifications:
library("RSQLite")
sqlite <- dbDriver("SQLite")
dbname <- "models_signif.db"
db = dbConnect(sqlite,dbname)
#brain_cortex_gtex_n <- dbGetQuery(db,"SELECT * FROM weights")
require("RSQLite")
sqlite <- dbDriver("SQLite")
myfile <- paste0("modelsn","_",i,".db")
dbname1 <- myfile
db1 = dbConnect(sqlite,dbname1)
sqliteCopyDatabase(db, db1)
dbDisconnect(db)
#gtex_n_1 <- dbGetQuery(db1,"SELECT * FROM weights") ##dim 9453
##now filter row1098 its beta is 0.002 and rsid is rs4560235
#dbGetQuery(db,"SELECT * FROM weights") ##dim 5415rows
rsid <- rsid_list[i]
dbExecute(db1,"DELETE FROM weights WHERE rsid=rsid_list[i] ")
dbDisconnect(db1)
}
Error:
Error: near "[i]": syntax error
1条答案
按热度按时间k97glaaz1#
rdis_list[i]
是R代码,而不是SQL代码。SQLite引擎(或任何DBMS引擎)不会以相同的方式解释它。由于它是R中的字符串,R解析器不会尝试推断它应该被替换为其他内容。快速/草率(而不是最佳实践)的方法是将其
paste
到查询中。同样,不是推荐的方法。更好的方法是使用“参数绑定”,有几个原因。在查询中的每个地方使用
?
,并将params=list(..)
添加到查询/语句中。参见参数化查询了解更多关于使用绑定参数的细节。
一些旁注:
1.你在循环外定义了
sqlite
、dbname
和db
,在循环中的每一次传递中重新创建这些变量是浪费的、不必要的,而且一点帮助都没有。这些变量可以从for
内部访问,使用它们。1.不要在这里使用
require
,原因有两个:首先,您已经加载了library("RSQLite")
,因此包函数在您的环境中已经可用,所以执行require
除了浪费资源之外什么也做不了(微)时间。第二,只使用require(.)
(用于任何用途)如果您认为包可能不可用,则捕获其返回值,并对其结果做出不同的React。有关相关函数的详细信息,请访问https://r-pkgs.org/namespace.html#search-path。