R使用genepop包计算Fst时出现无法打开文件报错的问题咨询
genepop包Fst()函数文件读取报错解决方案
问题场景
运行如下genepop Fst计算代码时触发报错:
library(genepop) setwd("C:/Users/Admin/Documents/Test R") infile<-file.choose() Fst( infile, sizes = FALSE, pairs = T, outputFile = "Run0-Neu", dataType = "Diploid", verbose = interactive() )
返回报错:
set_eof_check_EOLtype() cannot open file! parseFile() cannot reopen C:\Users\Admin\Documents\Test although it could previously be opened. Error in REstimatingSpatialStructureAlleleIdentyAllPopulationsPairs(inputFile, : parseFile() cannot reopen input file.
相同R版本、相同代码在其他设备可正常运行,仅当前设备触发报错。
报错原因
从报错信息里的路径截断特征(设置的工作目录是C:/Users/Admin/Documents/Test R,但报错里尝试读取的路径被截断为C:\Users\Admin\Documents\Test)可以直接定位核心问题:
genepop的底层文件读写逻辑由C语言实现,无法识别包含空格、全角中文、特殊符号的文件路径,遇到空格时会直接把空格识别为路径终止符,导致路径读取不全,找不到目标文件。
其他低概率诱因:
- genepop包版本过旧,存在已知的路径解析bug
- 输入的genepop格式文件换行符为非通用格式,或被其他程序占用锁定
- 文件编码不符合要求
解决方法
按优先级依次尝试即可:
- 清理路径中的空格和特殊字符(成功率90%以上)
把存储输入文件的文件夹Test R重命名为无空格的名称,比如Test_R,同步修改代码里的工作目录路径:
注意检查文件全路径所有层级都不要出现中文、全角符号、空格、&/%等特殊字符。setwd("C:/Users/Admin/Documents/Test_R") - 用短路径函数绕开空格识别问题
如果不想修改文件夹名称,调用R内置的shortPathName()函数将带空格的路径转换为Windows兼容的8.3短格式,修改文件读取行代码:infile <- shortPathName(file.choose()) - 检查输入文件状态
- 关闭所有可能打开该输入文件的程序(WPS、Excel、文本编辑器等),解除文件占用
- 用系统记事本打开输入文件,选择「另存为」,编码选ANSI,换行符选Windows CRLF格式后保存
- 重装最新版genepop包
旧版本包存在部分路径解析bug,运行如下代码重装后重试:remove.packages("genepop") install.packages("genepop")
内容的提问来源于stack exchange,提问作者Marie Launay
相关产品推荐
相关产品推荐

