필터 지우기
필터 지우기

Best way to rename a loaded variable?

조회 수: 329 (최근 30일)
Alec Nagel
Alec Nagel 2012년 11월 27일
댓글: Steven Lord 2022년 3월 17일
Say that I have a .mat file that contains a variable, and I need to load this variable and give it a different name. Is there any other (/better) way to do this than:
load(myFile, myVar)
eval(['myNewname = ' myVar '; clear ' myVar])
?
  댓글 수: 2
Jan
Jan 2012년 11월 27일
Where does this EVAL idea come from? Did you find EVAL in the documentation or did you see it in an example?
I ask, because it is such frequently suggested to avoid EVAL in this and other Matlab forums for so many years, that I actually expect, that this method should be extinct already.
Alec Nagel
Alec Nagel 2012년 11월 27일
True -- I have seen such admonitions too. They might have been what prompted the question, on some subconscious level :) The idea came from the top of my head, and/or someone's code I read. Matt's solution seems so obvious in hindsight, but I don't think I'm alone in not having thought of it and, somewhat guiltily, having resorted to EVAL instead.

댓글을 달려면 로그인하십시오.

채택된 답변

Matt Fig
Matt Fig 2012년 11월 27일
편집: Matt Fig 2012년 11월 27일
Say you have the name of your variable:
VAR = 'S';
Now you want to load that variable, but with the name T. This method follows the general rule of thumb to avoid 'poofing' variables into the workspace.
T = load('myfile',VAR); % Function output form of LOAD
T = T.(VAR)
  댓글 수: 3
Maria Ironside
Maria Ironside 2017년 10월 3일
Cool, so easy!
Catriona Fyffe
Catriona Fyffe 2020년 7월 14일
Nice, super helpful!

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Image Analyst
Image Analyst 2015년 2월 18일
I'd do it this way:
storedStructure = load(myFile, 'myVar'); % Load in ONLY the myVar variable.
myNewname = storedStructure.myVar; % Assign it to a new variable with different name.
clear('storedStructure'); % If it's really not needed any longer.
Same net effect, it just uses the names Alec gave, and avoids dynamic structure fields, which are a bit advanced for beginners and not necessary here if you know the actual name.

Stefano Petrò
Stefano Petrò 2022년 3월 17일
A way to do this in a single command is
myNewname = getfield(load(myFile,myVar),myVar);
  댓글 수: 1
Steven Lord
Steven Lord 2022년 3월 17일
If you're using release R2019b or later you can use dot indexing into the output of function calls.
myVar = 'cdate';
C = load('census.mat', myVar).(myVar)
C = 21×1
1790 1800 1810 1820 1830 1840 1850 1860 1870 1880

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by