Глупо, был цикл for, который назначал глобально. Это имело эффект повторного добавления нескольких столбцов на каждой итерации. SQLite просто не добавляет дополнительные столбцы, поэтому не завершается ошибкой, пока вставка не станет слишком большой.
Тем не менее, загадочный характер проблемы можно увидеть в упрощенном примере ниже.
library(RSQLite)
library(magrittr)
library(dplyr)
a <- mtcars[1, ]
b <- cbind(mtcars[1, ], mtcars[2, ])
> as_tibble(a)
# A tibble: 1 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
* <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
> as_tibble(b)
Error: Columns `mpg`, `cyl`, `disp`, `hp`, `drat`, `wt`, `qsec`, `vs`, `am`, `gear`, `carb` must have unique names
# But "tibbble" wasn't used:
> b
mpg cyl disp hp drat wt qsec vs am gear carb mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21 6 160 110 3.9 2.62 16.46 0 1 4 4 21 6 160 110 3.9 2.875 17.02 0 1 4 4
con <- DBI::dbConnect(RSQLite::SQLite(),
file.path(getwd(),"StackoverflowExample", "exw.sqlite"))
DBI::dbWriteTable(conn = con,
name = "IDBacDatabase", # SQLite table to insert into
a, # Insert single row into DB
append = TRUE, # Append to existing table
overwrite = FALSE) # Do not overwrite
DBI::dbWriteTable(conn = con,
name = "IDBacDatabase", # SQLite table to insert into
b, # Insert single row into DB
append = TRUE, # Append to existing table
overwrite = FALSE) # Do not overwrite
db <- dplyr::tbl(con, "IDBacDatabase")
db
# Source: table<IDBacDatabase> [?? x 11]
# Database: sqlite 3.22.0 [C:\Users\chase\Documents\StackoverflowExample\ex.sqlite]
mpg cyl disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.62 16.5 0 1 4 4
Редактировать
Чтобы сделать неудачную вставку:
b <- mtcars[1, ]
for(i in 1:1000){
b <- cbind(b, mtcars[2, ])
}