2010-08-10 3 views
6

R에 RSQLite 라이브러리를 사용하여 RAM에 비해 너무 큰 데이터 세트를 관리하고 있습니다. 각 회귀 분석에서 데이터베이스를 쿼리하여 한 번에 회계 연도를 검색합니다. 지금은 회계 연도가 하드 코딩이 :WHERE 필드에 사용자 지정 변수가있는 RSQLite 쿼리

data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==2008") 

나는 변화가 좀 더 쉽게하기 위해 회계 연도 (위 2008) 만들기 (그리고 바보 - 증거)하고 싶습니다. SQL 쿼리 문자열에 변수를 전달할 수있는 방법이 있습니까? 내가 사용하는 사랑 :

fiscal.year <- 2008 
data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==fiscal.year") 
+0

비슷한 하나 : http://stackoverflow.com/questions/3416973/dynamic-string-in-r – Marek

답변

9

SQLite는 만 쿼리에 대해 아래로 전달 된 문자열을 볼 수 있습니다, 그래서 당신이하는 일은

sqlcmd <- paste("SELECT * FROM annual WHERE fiscal=", fiscal.year, sep="") 
    data.annual <- dbGetQuery(db, sqlcmd) 

좋은 것은 같은 당신이 평소 사용할 수 있다는 것입니다 루프를 푸는 방법. 당신이 램 제한이 있음을 잠시 잊고, 개념적으로는

years <- seq(2000,2010) 
    data <- lapply(years, function(y) { 
    dbGetQuery(db, paste("SELECT * FROM annual WHERE fiscal=", y, sep="") 
    } 

을 할 수있는 현재 데이터는 모든 연간 데이터 세트를 포함하는 목록입니다. 또는 데이터를 유지하고 회귀 분석을 실행하고 요약 개체 만 저장할 수도 있습니다.

+0

와우! 나는'paste'로 문자열을 생성하고 그것을 인수로 전달한다는 아이디어를 내면화해야합니다! 감사! –

3

더크의 대답은 점입니다. 내가 시도하는 한 가지 작은 점은 쉬운 테스트를 위해 형식을 변경하는 것입니다. SQL 텍스트를 여러 번 잘라내어 붙여 넣기해야하는 것 같습니다. 그래서 나는 다음과 같은 형식 :

sqlcmd <- paste(" 
    SELECT * 
    FROM annual 
    WHERE fiscal= 
", fiscal.year, sep="") 
data.annual <- dbGetQuery(db, sqlcmd) 

이 그냥 쉽게 절단하고 DB 쿼리 환경에서 테스트를 위해 인/아웃의 SQL 비트를 붙여 넣기 할 수 있습니다. 짧은 쿼리는 큰 문제가 아니지만 긴 SQL 문자열로 인해 번거로울 수 있습니다.

+0

당신은 하나의 이맥스 버퍼에서 다른 이맥스 버퍼에 붙여 넣었다는 것을 의미합니까? ;-) –

+0

오우 .. 아프다. 거기에서 나를 파고 들렀다. 아프다. 아야. –

+0

그리고 그 말은 "emacs의 나의 명백한 과소 이용으로 눈을 마주 치지 마라" –

관련 문제