0

所以我有一个变量设置为 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(), or Length()or or is.integer()oris.null()或任何我能想到的东西来区分它们,因为它们都存在,长度相同且不为空。

我确定这很简单,但我对此很陌生(显然)。

谢谢您的帮助。

4

2 回答 2

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。

于 2013-03-12T20:11:34.730 回答
0

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

于 2013-03-12T20:05:00.517 回答