在 sqldf::read.csv.sql() 后关闭未使用的连接
Closing unused connection after sqldf::read.csv.sql()
sqldf::read.csv.sql()
函数很有用 retrieving only a small portion of a large CSV.
但是,连接保持打开状态并最终产生以下警告(在 运行 连接几次之后):
Warning messages:
closing unused connection 11 (C:\Users\wibeasley\AppData\Local\Temp\asfasdf\fileasdfasdfasdf)
四年前,recommended发布
base::closeAllConnections()
。
是否有更新的方法可以选择性地仅关闭由 sqldf::read.csv.sql()
创建的连接?
path <- tempfile()
write.csv(mtcars, file=path, row.names=F)
# read.csv(path)
ds <- sqldf::read.csv.sql(path, "SELECT * FROM file", eol="\n")
base::closeAllConnections() # I'd like to be more selective than 'All'.
unlink(path)
真正的代码是中间两行。前三行设置假装文件。最后的 base::unlink()
删除临时 CSV。
我尝试传递一个现有的文件连接(这样我以后可以明确地关闭它)显然在我运行几次时仍然保持连接打开:
Warning messages:
1: In .Internal(sys.call(which)) : closing unused connection 13 ()
path <- tempfile()
write.csv(mtcars, file=path, row.names=F)
ff <- base::file(path) # Create an explicit connection.
ds <- sqldf::read.csv.sql(sql="SELECT * FROM ff")
base::close(ff)
unlink(path)
我的两个 OP 片段仍然产生有关连接的警告。这样可以避免它们。
path_db <- tempfile(fileext = ".sqlite3")
path_csv <- tempfile(fileext = ".csv")
write.csv(mtcars, file=path_csv, row.names = F)
# read.csv(path_csv) # Peek at the results.
db <- DBI::dbConnect(RSQLite::SQLite(), dbname = path_db)
# DBI::dbExecute(db, "DROP TABLE if exists car;") # If desired
RSQLite::dbWriteTable(db, name = "car", value = path_csv)
ds <- DBI::dbGetQuery(db, "SELECT * FROM car")
str(ds)
#> 'data.frame': 32 obs. of 11 variables:
#> $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#> $ cyl : int 6 6 4 6 8 6 8 4 4 6 ...
#> $ disp: num 160 160 108 258 360 ...
#> $ hp : int 110 110 93 110 175 105 245 62 95 123 ...
#> $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
#> $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
#> $ qsec: num 16.5 17 18.6 19.4 17 ...
#> $ vs : int 0 0 1 1 0 1 0 1 1 1 ...
#> $ am : int 1 1 1 0 0 0 0 0 0 0 ...
#> $ gear: int 4 4 4 3 3 3 3 4 4 4 ...
#> $ carb: int 4 4 1 1 2 1 4 2 2 4 ...
DBI::dbDisconnect(db)
unlink(path_db)
unlink(path_csv)
由 reprex package (v2.0.1)
于 2022-03-23 创建
sqldf::read.csv.sql()
函数很有用 retrieving only a small portion of a large CSV.
但是,连接保持打开状态并最终产生以下警告(在 运行 连接几次之后):
Warning messages:
closing unused connection 11 (C:\Users\wibeasley\AppData\Local\Temp\asfasdf\fileasdfasdfasdf)
四年前,recommended发布
base::closeAllConnections()
。
是否有更新的方法可以选择性地仅关闭由 sqldf::read.csv.sql()
创建的连接?
path <- tempfile()
write.csv(mtcars, file=path, row.names=F)
# read.csv(path)
ds <- sqldf::read.csv.sql(path, "SELECT * FROM file", eol="\n")
base::closeAllConnections() # I'd like to be more selective than 'All'.
unlink(path)
真正的代码是中间两行。前三行设置假装文件。最后的 base::unlink()
删除临时 CSV。
我尝试传递一个现有的文件连接(这样我以后可以明确地关闭它)显然在我运行几次时仍然保持连接打开:
Warning messages:
1: In .Internal(sys.call(which)) : closing unused connection 13 ()
path <- tempfile()
write.csv(mtcars, file=path, row.names=F)
ff <- base::file(path) # Create an explicit connection.
ds <- sqldf::read.csv.sql(sql="SELECT * FROM ff")
base::close(ff)
unlink(path)
我的两个 OP 片段仍然产生有关连接的警告。这样可以避免它们。
path_db <- tempfile(fileext = ".sqlite3")
path_csv <- tempfile(fileext = ".csv")
write.csv(mtcars, file=path_csv, row.names = F)
# read.csv(path_csv) # Peek at the results.
db <- DBI::dbConnect(RSQLite::SQLite(), dbname = path_db)
# DBI::dbExecute(db, "DROP TABLE if exists car;") # If desired
RSQLite::dbWriteTable(db, name = "car", value = path_csv)
ds <- DBI::dbGetQuery(db, "SELECT * FROM car")
str(ds)
#> 'data.frame': 32 obs. of 11 variables:
#> $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#> $ cyl : int 6 6 4 6 8 6 8 4 4 6 ...
#> $ disp: num 160 160 108 258 360 ...
#> $ hp : int 110 110 93 110 175 105 245 62 95 123 ...
#> $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
#> $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
#> $ qsec: num 16.5 17 18.6 19.4 17 ...
#> $ vs : int 0 0 1 1 0 1 0 1 1 1 ...
#> $ am : int 1 1 1 0 0 0 0 0 0 0 ...
#> $ gear: int 4 4 4 3 3 3 3 4 4 4 ...
#> $ carb: int 4 4 1 1 2 1 4 2 2 4 ...
DBI::dbDisconnect(db)
unlink(path_db)
unlink(path_csv)
由 reprex package (v2.0.1)
于 2022-03-23 创建