如何阻止Matlab将受试者ID数字转换为其他字符?
MATLAB中数字受试者ID被转换为字符的问题
问题描述
我有一个MATLAB脚本,在循环中处理数据。在循环外设置好目录(DIRs)后,将受试者ID数字存入向量,随后加载文件处理:
SUB = {1040 2001 (等等...)}
循环代码片段:
for i = 1:length(SUB) %执行语句并捕获错误 try %加载set文件 EEG = pop_loadset('filename',[SUB{i} '_WIT_postprocessing.set'],'filepath', [DIR2 '/']);
但针对特定受试者持续遇到错误:例如受试者1040,EEGlab无法加载数据,因为MATLAB将1040转换为了A,拼接后的文件名变成'A_WIT_postprocessing.set';2001则变成小方块。
原因与解决方法
原因
你把受试者ID以数值类型存在了单元格数组中,当MATLAB执行字符串拼接时,会将数值视为ASCII编码值转换为对应的字符:
- 1040对应的ASCII字符是大写字母A
- 2001超出标准ASCII范围(0-127),所以显示为方块
解决方法
有两种直接的修复方式:
- 方式一:定义SUB时直接存储字符串
给每个ID加上单引号,将其定义为字符串类型:SUB = {'1040', '2001', ...}; - 方式二:拼接时将数值转换为字符串
如果已经有数值类型的SUB数组,使用num2str()函数把数值转成字符串后再拼接:EEG = pop_loadset('filename', [num2str(SUB{i}) '_WIT_postprocessing.set'], 'filepath', [DIR2 '/']);
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

