所以我有一个变量设置为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()
或我能想到的任何其他因素来区分它们,因为它们都存在,是相同的长度并且不为空。
我确信这很简单,但我是新手(显然)。
感谢您的帮助。
答案 0 :(得分:1)
您可以在此使用nrow
或dim
这是一个可重复的示例:
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)
应为零。只需检查行数。