代码之家  ›  专栏  ›  技术社区  ›  wibeasley

在sqldf:之后关闭未使用的连接:读取.csv.sql()

  •  1
  • wibeasley  · 技术社区  · 6 年前

    这个 sqldf::read.csv.sql() 功能一直很有用 retrieving only a small portion of a large CSV .
    但是,连接将保持打开状态,并最终产生以下警告(运行几次后):

    警告消息:

    关闭未使用的连接11(C:\Users\wibeasley\AppData\Local\Temp\asfasdf\fileasdfasdf)

    recommended 发行 base::closeAllConnections() . 有没有新的方法可以选择性地只关闭由创建的连接 sqldf::读取.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。

    我试图传递一个现有的文件连接(这样我以后可以显式地关闭它),但当我多次运行它时,它仍然保持打开状态:

    警告消息:

    1:内部(系统调用(which)):关闭未使用的连接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)     
    
    0 回复  |  直到 6 年前