运行sqlite时的空变量

时间:2013-03-12 20:00:12

标签: r sqlite empty-list

所以我有一个变量设置为R中的sqlite查询,如下所示:

query<-paste("SELECT ID FROM DataTable WHERE Name = \'", X, "\'", sep="")
xid<-dbGetQuery(conn, query)

如果X在数据库中,则xid为

1 obs. of 1 varaibles

但如果X不在数据库中,则xid为

0 obs of 1 variables

我无法使用exists()Length()is.integer()is.null()或我能想到的任何其他因素来区分它们,因为它们都存在,是相同的长度并且不为空。

我确信这很简单,但我是新手(显然)。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以在此使用nrowdim这是一个可重复的示例:

library(RSQLite)
driver <- dbDriver("SQLite")
conn <- dbConnect(driver, dbname='DB_KEY')

mydf <- read.table(text ='ID    NAme
1   2   OtherData1
2   2   OtherData2
3   2   OtherData3
4   2   OtherData4
5   2   OtherDat',head=T)

dbWriteTable(conn, "DataTable", mydf, append=TRUE)
dbDisconnect(conn)
X <- 'OtherData1'
query<-paste("SELECT type FROM Data1 WHERE name = \'", X , "\'", sep="")
conn <- dbConnect(driver, dbname='DB_KEY')
xid<-dbGetQuery(conn, query)

dim(xid)
[1] 1 1
dim(xid.notexist)
[1] 0 1

当查询未返回任何数据时,dim(xid.notexist)[1] = nrow(xid.notexist)等于0.

答案 1 :(得分:0)

dbGetQuery返回一个数据框。在第一种情况下,它有一行,所以nrow(xid)应该是1.在第二种情况下,它应该返回一个零行的数据帧,因此nrow(xid)应为零。只需检查行数。