How to use genvarname variable after creation?
12 次查看(过去 30 天)
显示 更早的评论
let's take an ex. from here:
"Example 2
Read a column header hdr from worksheet trial2 in Excel® spreadsheet myproj_apr23:
[data hdr] = xlsread('myproj_apr23.xls', 'trial2');
Make a variable name from the text of the column header that will not conflict with other names:
v = genvarname(['Column ' hdr{1,3}]);
Assign data taken from the spreadsheet to the variable in the MATLAB workspace:
eval([v '= data(1:7, 3);']);"
How do I use the variable that is created?
1 个评论
采纳的回答
Rik
2021-12-14
This is a terrible idea. You are forced to use eval every time.
The only time you wouldn't need eval is if you are using it to access fields of a struct. I would say that is the primary use case of this function.
3 个评论
Rik
2021-12-14
I keep forgetting table exists. Maybe because I don't use them and they look to me like syntactic sugar for a struct vector. I suspect I'm just missing the point.
Steven Lord
2021-12-17
Storing the data from that sample table I created in a struct would require deciding which type of access to the data you're going to do more often and so want to make easier.
r = randperm(5).';
hocusPocus = r.^2;
% Scalar struct with array fields
s1 = struct('r', r, 'hocusPocus', hocusPocus);
% Or array of structs with scalar fields
s2 = struct('r', num2cell(r), 'hocusPocus', num2cell(hocusPocus));
It's easy to retrieve all the elements of one of the fields using s1 but more difficult to get a specific element from both r and hocusPocus.
allOfR = s1.r
secondElements.r = s1.r(2);
secondElements.hocusPocus = s1.hocusPocus(2)
It's harder to get all of the elements of one of the fields using s2 but it's easier to get a specific element from both r and hocusPocus. The first one looks easy but that's because I took advantage of my knowledge that r contains scalars and so can be concatenated into a column vector. In the general case this is trickier.
allOfR = vertcat(s2.r)
secondElements = s2(2)
In a table array, you can slice across rows or down variables basically equally easily.
t = table(r, hocusPocus);
allOfR = t.r % or
allOfR = t(:, 'r') % or t(:, 2)
secondElements = t(2, :)
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Text Files 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!