2017-03-31 4 views
1

R 언어 DBI :: sqlAppendTable 함수를 숫자가 아닌 다른 값으로 사용할 수 없습니다. 아래는 문제를 설명하는 코드입니다. 문제는 sqlAppendTable이 데이터를 인용하지 않는다는 것입니다. 모든 수정 또는 해결 방법은 크게 감사하겠습니다.R : sqlAppendTable은 숫자와 만 작동합니까?

num = data.frame(matrix(1:26, ncol=2)) 
let = data.frame(matrix(letters, ncol=2)) 

test.sqlAppendTable = function(dfr) { 
    #dfr: A data frame. 
    conx <- dbConnect(RSQLite::SQLite(), ":memory:") 
    on.exit(dbDisconnect(conx)) 
    dbWriteTable(conx, "temp", dfr[1:5, ]) 
    temp = dbReadTable(conx, 'temp') 
    print(temp) 
    sat = sqlAppendTable(conx, 'temp', dfr[6:10, ]) 
    print(sat) 
    rs = dbExecute(conx, sat) 
    cat('Result set (rs): ') 
    print(rs) 
    temp = dbReadTable(conx, 'temp') 
    print(temp) 
} 

test.sqlAppendTable(num) #Runs fine. 
test.sqlAppendTable(let) #Generates error: 
#Error in rsqlite_send_query([email protected], statement) : no such column: j 
+1

* append * 인수를 지정하여 RSQLite의'dbWriteTable'을 사용하지 않는 이유는 무엇입니까? – Parfait

+0

추가 사운드를 약속하는 dbWriteTable. – Argent

+0

그러나 dbWriteTable 문서에서 추가에 대한 언급은 없습니다. http://127.0.0.1:31912/library/DBI/html/dbReadTable.html – Argent

답변

0

이것은 RSQLite 패키지의 결함처럼 보입니다. 값은 실제로 인용되어야합니다. 따옴표가 다음 예에 추가합니다 :

DBI::sqlAppendTable(DBI::ANSI(), table = "test", data.frame(a = 1, b = "2")) 
#> <SQL> INSERT INTO "test" 
#> ("a", "b") 
#> VALUES 
#> (1, '2') 

는 해당 GitHub issue 참조하십시오.

1)는 SQLite 데이터베이스 파일의 임시 테이블 (임시)로 추가 할 데이터 프레임을 쓰기 :

+0

GitHub에서이 문제를 제기 해 주셔서 감사합니다. – Argent

0

내가 함께 해결 방법을 자갈 할 수 있었다.

2) SQLite는 문을 사용하여 대상 테이블 (대상)에 추가 :

insert into target select * from temp; 

3) 온도를 놓습니다.

이것은 매우 빠르게 실행됩니다. 아마도 SQLite가 잘 최적화 되었기 때문일 것입니다.

칙 :

당신은 참으로 TRUE 옵션 APPEND =와 dbWriteTable을 사용하여 데이터베이스 테이블에 데이터 프레임을 추가 할 수 있습니다. 위에서 설명한 내 해결 방법에 대해이를 테스트 해본 결과 놀랍게도 dbWriteTable보다 약 40 % 빠름이 해결되었습니다.