加载含点变量名的.mat文件遇变量访问及重命名问题咨询
解决MATLAB中无法访问带点变量名的问题
问题1:是否确认该问题由变量名含点导致?
完全确认!这是MATLAB和R命名规则不兼容引发的问题:
- R允许变量名包含点(甚至是常用的命名风格),导出
.mat文件时会直接保留这个命名; - 但在MATLAB里,点是对象属性的访问符号——当你输入
final.product(1)时,MATLAB会误认为你要访问名为final的对象的product属性,而不是一个名为final.product的独立变量,所以会报Undefined variable "final"的错误。那些不带点的变量符合MATLAB的命名规范,因此能正常访问。
问题2:是否存在无需读取变量即可重命名的方法?
有的!可以用MATLAB的matfile函数直接操作.mat文件,不需要把变量加载到工作区,步骤如下:
- 创建可写的MAT文件对象:
matObj = matfile('C:\Users\Loup\Downloads\5. Source-Intermediates-Products.mat', 'Writable', true);
- 将带点的变量赋值给新的合规变量名,再删除原变量:
% 把final.product重命名为final_product(下划线替代点,符合MATLAB命名规则) matObj.final_product = matObj.('final.product'); delete(matObj, 'final.product');
操作完成后,你再用load加载文件,就能正常访问final_product变量了。
如果你的.mat文件不大,也可以用结构体中转的方式(需要加载到内存):
% 把所有变量加载到结构体中 data = load('C:\Users\Loup\Downloads\5. Source-Intermediates-Products.mat'); % 重命名带点的变量 data.final_product = data.('final.product'); % 删除原带点变量 data = rmfield(data, 'final.product'); % 把修改后的结构体保存回原文件 save('C:\Users\Loup\Downloads\5. Source-Intermediates-Products.mat', '-struct', 'data');
另外补充说明:你之前尝试load指定final.product报错,是因为load的变量名参数会把点当作分隔符解析,无法识别带点的变量名,所以必须用结构体或matfile的方式来处理。
内容的提问来源于stack exchange,提问作者user3387439
相关产品推荐
相关产品推荐

