這樣做的原因是因爲默認的表名基於在R.數據幀的名稱的當使用lapply
,但它確實不採取索引名。
爲dplyr::copy_to.src_sql
的文檔中包含:
## S3 method for class 'src_sql'
copy_to(dest, df, name = deparse(substitute(df)),
types = NULL, temporary = TRUE, unique_indexes = NULL, indexes = NULL,
analyze = TRUE, ...)
線name = deparse(substitute(df))
顯示了表名的由來。
我們可以看到什麼變成:
res <- list("iris" = iris, "cars" = cars)
tmp = lapply(res, function(x) print(deparse(substitute(x))))
#> [1] "X[[i]]"
#> [1] "X[[i]]"
的name
在SQLite
源表是X[[i]]
;一旦第一行被執行,該表就已經存在。
我們可以通過使用明確的for
循環和二次傳遞名稱或在索引編號上使用lapply
來解決。
例如:
res <- list("iris" = iris, "cars" = cars)
my_db <- dplyr::src_sqlite(paste0(tempdir(), "/foobar.sqlite3"),
create = TRUE)
lapply(seq_along(res), function(i, l){dplyr::copy_to(my_db, l[[i]], names(l)[[i]])}, l = res)
my_db %>% tbl("iris") %>% head
#> Source: query [?? x 5]
#> Database: sqlite 3.8.6
#>
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3.0 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5.0 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
my_db %>% tbl("cars") %>% head
#> Source: query [?? x 2]
#> Database: sqlite 3.8.6
#>
#> speed dist
#> <dbl> <dbl>
#> 1 4 2
#> 2 4 10
#> 3 7 4
#> 4 7 22
#> 5 8 16
#> 6 9 10
嘗試刪除並重新創建你的'sqlite'數據庫。它看起來已經成功了。 –
仍然失敗。沒有表格x。只有虹膜和汽車。這就是爲什麼我認爲這是一個NSE問題。 – jsta