【问题标题】:File.exists() doesn't workFile.exists() 不起作用
【发布时间】:2015-05-18 23:20:42
【问题描述】:

我要么盲目要么愚蠢,但我无法继续前进:

我有一个变量 sourceName 定义为:

sourceName = file.path(dataDatabase, dates[1], paste0(exchange, "_", ticker, "_trade.csv"))

这是这个字符串:

 "/home/malejg/goxtrader/data/2014-12-12/Bitfinex_BTC_trade.csv"

当我检查文件的存在性时,我得到了以下结果:

> file.exists(sourceName)
> [1] TRUE

所以文件肯定存在。但是当我在 if 语句中使用上面的代码时:

 if(file.exists(sourceName)){
    some sample code here}

它会抛出一个错误:

 Error in if (file.exists(sourceName)) { : argument is of length zero

这怎么可能? 该代码在 Windows 上运行良好,那么是否存在一些与 Linux 相关的问题?

会话信息:

sessionInfo() R 版本 3.1.2 (2014-10-31) 平台: x86_64-pc-linux-gnu(64位)

语言环境:[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_US.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

附加的基础包:[1] stats graphics grDevices utils
数据集方法库

其他附加包:[1] data.table_1.9.4 xts_0.9-7
zoo_1.7-11

通过命名空间加载(未附加):[1] chron_2.3-45
grid_3.1.2 lattice_0.20-30 plyr_1.8.1 [5] Rcpp_0.11.5
reshape2_1.4.1 stringr_0.6.2 tools_3.1.2

【问题讨论】:

  • 你确定错误是由于file.exists返回一个长度为零的对象吗?你试过像if (file.exists(sourceName))print('hello world')这样的小块吗

标签: r


【解决方案1】:

这是一个非常投机的答案...

我可以让file.exists返回一个长度为零的逻辑向量,如下所示:

> file.exists(character(0))
logical(0)

所以我的假设是你错误地擦除了应该是文件路径的变量,并错误地将零长度字符向量传递给file.exists

这意味着isTRUE 在某种意义上是最安全的选择,但我个人很难想到将零长度向量传递给file.exists的情况是我故意的,我可能希望看到该错误并修复它。

【讨论】:

  • dataDatabase 可能为 NULL。 file.path(NULL, "foo.bar") 返回character(0)
【解决方案2】:

你应该使用 isTRUE()

if (isTRUE(file.exists(sourceName))) {
    cat('Found')
}

【讨论】:

  • 但是为什么有必要呢?
  • 我也想看看解释,因为在我的测试中我无法重现 OP 的错误,所以 AFAICT isTRUE 应该没有必要。
  • 如果能看到演示实际问题的最小代码集就好了。注意:isTRUE 函数将为空向量返回 false。零长度向量也是我可以使“if”语句返回 OP 的原始错误消息的唯一方法。
  • @joran:你在开发什么操作系统?我的初始代码在 Windows 上运行良好,但在 Ubuntu 上抛出了上述错误。我知道这很奇怪,但上面删除了错误。我可以提供一个可重现的示例,但由于它适用于文件和目录,因此您必须拥有相同的文件。
  • @SteefGregor 我在 OS X 上。我觉得奇怪的部分不是 isTRUE “工作”,而是 file.exists 首先返回了一个长度为零的向量。我对此的最初反应是,它至少是未记录的行为,并且可能是一个错误。如果您可以证明file.exists 可重复地返回一个空向量,我认为这本身就是一个有趣的问题。
猜你喜欢
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多