R错误覆盖不存在的文件

Posted

技术标签:

【中文标题】R错误覆盖不存在的文件【英文标题】:R error overwriting file that is not there 【发布时间】:2020-02-12 13:09:41 【问题描述】:

我正在尝试使用openxlsx 写入文件:

saveWorkbook(wb, file=filename, overwrite=T)

没有给我错误,但没有文件出现,而

> saveWorkbook(wb, file=filename, overwrite=F)
Error in saveWorkbook(wb, file = filename, overwrite = F) : 
  File already exists!

我可以在 R 中很清楚地看到 t6his:

> filename
[1] "/home/balter/miseq-239/analysis/beta_diversity//tables/miseq-239_beta_diversity_Genus_clust_unifrac_permanova.xlsx"
> filedir = gsub('\\/[^/]+$', '', filename)
> filedir
[1] "/home/balter/miseq-239/analysis/beta_diversity//tables"
> file.exists(filename)
[1] TRUE
> list.files(path=filedir)
character(0)

发生了什么事?

【问题讨论】:

@IceCreamToucan 它来自使用 R 函数 file.path 组合文件路径。双斜杠在 Linux 中根本不重要。 请注意,您可以使用dirname(filename) 以比使用gsub 更便携的方式获取文件的父目录路径。 【参考方案1】:

我似乎无法通过模拟复制此问题。你有多确定文件没有被创建(例如,你能在saveWorkbook 之后立即运行file.exists 吗?)。我会更新openxlsx,看看您是否可以在新会话中复制此示例。

library(openxlsx)
wb <- createWorkbook("Creator of workbook")
addWorksheet(wb, sheetName = "My first worksheet")

tmp <- tempfile(fileext = ".xlsx")

# Create when file does not exist [overwrite = TRUE]
file.exists(tmp)
#> [1] FALSE
saveWorkbook(wb, file = tmp, overwrite = TRUE)
#> Note: zip::zip() is deprecated, please use zip::zipr() instead
file.exists(tmp)
#> [1] TRUE

# Create when file does not exist [overwrite = FALSE]
file.remove(tmp)
#> [1] TRUE
file.exists(tmp)
#> [1] FALSE
saveWorkbook(wb, file = tmp, overwrite = FALSE)
file.exists(tmp)
#> [1] TRUE

# Create when file exists [overwrite = TRUE]
file.exists(tmp)
#> [1] TRUE
saveWorkbook(wb, file = tmp, overwrite = TRUE)
file.exists(tmp)
#> [1] TRUE

# Create when file exists [overwrite = FALSE]
file.exists(tmp)
#> [1] TRUE
saveWorkbook(wb, file = tmp, overwrite = FALSE)
#> Error in saveWorkbook(wb, file = tmp, overwrite = FALSE): File already exists!
file.exists(tmp)
#> [1] TRUE


sessionInfo()
#> R version 3.6.1 (2019-07-05)
#> Platform: x86_64-apple-darwin18.6.0 (64-bit)
#> Running under: macOS Mojave 10.14.6
#> 
#> Matrix products: default
#> BLAS/LAPACK: /usr/local/Cellar/openblas/0.3.7/lib/libopenblasp-r0.3.7.dylib
#> 
#> locale:
#> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#> [1] openxlsx_4.1.0.1
#> 
#> loaded via a namespace (and not attached):
#>  [1] compiler_3.6.1  magrittr_1.5    tools_3.6.1     htmltools_0.4.0
#>  [5] yaml_2.2.0      Rcpp_1.0.2      stringi_1.4.3   rmarkdown_1.16 
#>  [9] highr_0.8       knitr_1.25      stringr_1.4.0   xfun_0.10      
#> [13] digest_0.6.21   zip_2.0.4       rlang_0.4.0     evaluate_0.14

由reprex package (v0.3.0) 于 2019 年 10 月 15 日创建

【讨论】:

我完全理解。我不希望你能够复制它。事实上,我以前从未遇到过这个问题。我相信这是 R 和 Linux 文件系统之间的一些小故障,以至于 R 看到了一些幻像文件或其他东西。知道怎么会出现这样的事情吗?

以上是关于R错误覆盖不存在的文件的主要内容,如果未能解决你的问题,请参考以下文章

文件操作

CMD用robocopy 怎样不覆盖已存在的文件?

day3-文件操作之打开模式

文件读写

文件操作

linux基础第二周