我必须要么是盲目的,要么是愚蠢的,但我无法继续前进:
我有一个变量sourceName,定义为:
sourceName = file.path(dataDatabase, dates[1], paste0(exchange, "_", ticker, "_trade.csv"))
这是这个字符串:
"/home/malejg/goxtrader/data/2014-12-12/Bitfinex_BTC_trade.csv"
当我检查文件的existenece时,我得到以下结果:
> 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
答案 0 :(得分:3)
这是一个极具推测性的答案......
我可以让file.exists
返回零长度的逻辑向量,如下所示:
> file.exists(character(0))
logical(0)
所以我的暂定假设是你错误地擦除了应该是文件路径的变量,并错误地将零长度字符向量传递给file.exists
。
这意味着isTRUE
在某种意义上是最安全的选项,但我个人很难想到将零长度向量传递给file.exists
的情况对我而言是有意的,我可能希望看到错误并修复它。
答案 1 :(得分:1)
您应该使用isTRUE()
if (isTRUE(file.exists(sourceName))) {
cat('Found')
}