我想使用dplyr包从data.frame列表中创建一个SQLite数据库。看起来dplyr::copy_to
是我需要的。我认为问题与NSE有关。另请参阅dplyr with databases的小插图。
data(iris)
data(cars)
res <- list("iris" = iris, "cars" = cars)
my_db <- dplyr::src_sqlite(paste0(tempdir(), "/foobar.sqlite3"),
create = TRUE)
lapply(res, function(x) dplyr::copy_to(my_db, x))
错误:表x已存在。
2条答案
按热度按时间vcudknz31#
这是因为默认表名基于R中数据框的名称。使用
lapply
时,它不采用索引名称。dplyr::copy_to.src_sql
的文档包含:行
name = deparse(substitute(df))
显示表名的来源。我们可以看到它会变成什么:
SQLite
源中表的name
为X[[i]]
;一旦执行了第一行,表就已经存在了。我们可以通过使用显式
for
循环并辅助传递名称来解析,或者通过在索引号上使用lapply
来解析。例如:
ecfdbz9o2#
如果某人更喜欢
{purrr}
选项:或