2013-03-12 3 views
0

Таким образом, у меня есть набор переменных в качестве SQLite запроса в 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

dbGetQuery возвращает рамку данных. В первом случае он имеет одну строку, поэтому nrow(xid) должен быть 1. Во втором случае он должен вернуть кадр данных с нулевыми строками, поэтому nrow(xid) должен быть равен нулю. Просто проверьте количество строк.

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.

Смежные вопросы