在Matlab中自动命名和连接单独创建的字符串、数字和向量

在Matlab中自动命名和连接单独创建的字符串、数字和向量,matlab,vector,concatenation,string-concatenation,Matlab,Vector,Concatenation,String Concatenation,我编写了一个示例代码来说明我的问题——见下文。我有几个操作,每个操作都由不同的服务器独立执行(不仅仅是示例中的4个,还有更多)。我想 1) 自动命名结果,以便我可以对更多年份、部分年份和工厂类型进行命名(例如,当Year=2008、PartOfYear=1、PlantType=1等时,将变量命名为“string200811”) 2) 也可以自动化连接(如下面代码中的连接) 如果有任何不清楚的地方,请告诉我 % Operation 1 Year = 2008; PartOfYear = 1; Pl

我编写了一个示例代码来说明我的问题——见下文。我有几个操作,每个操作都由不同的服务器独立执行(不仅仅是示例中的4个,还有更多)。我想

1) 自动命名结果,以便我可以对更多年份、部分年份和工厂类型进行命名(例如,当Year=2008、PartOfYear=1、PlantType=1等时,将变量命名为“string200811”)

2) 也可以自动化连接(如下面代码中的连接)

如果有任何不清楚的地方,请告诉我

% Operation 1
Year = 2008;
PartOfYear = 1;
PlantType = 1;
string200811 = 'blabla'; % some random result
number200811 = rand(1); % some other random result
vector200811 = [rand(1); rand(1); rand(1); rand(1)]; % some other random result

% Operation 2
Year = 2008;
PartOfYear = 1;
PlantType = 2;
string200812 = 'blablablubb';
number200812 = rand(1);
vector200812 = [rand(1); rand(1); rand(1); rand(1)];

% Operation 3
Year = 2008;
PartOfYear = 2;
PlantType = 1;
string200821 = 'blablabla';
number200821 = rand(1);
vector200821 = [rand(1); rand(1); rand(1); rand(1)];

% Operation 4
Year = 2008;
PartOfYear = 2;
PlantType = 2;
string200822 = 'blablablablubb';
number200822 = rand(1);
vector200822 = [rand(1); rand(1); rand(1); rand(1)];

% Concatenate results
Results = {2008, 1, 1, string200811, number200811;...
           2008, 1, 2, string200812, number200812;...
           2008, 2, 1, string200821, number200821;...
           2008, 2, 2, string200822, number200822}
Table = cell2table(Results);
writetable(Table,'ResultsTest.xls','Sheet',1);

vectors = vertcat(vector200811, vector200812, vector200821, vector200822)

不清楚您是如何初始化每个“操作”并存储结果的。您应该只返回一些struct或cell数组对象


函数生成结构:

% Operation x
function myStruct = createStruct()
    % ... other functionality here which actually generates the data values
    myStruct.Year = 2008;
    myStruct.PartOfYear = 2;
    myStruct.PlantType = 2;
    myStruct.String = 'randomstring';
    myStruct.Number = 0.5;
    myStruct.Vector = 1:4;
end
然后将所有结构放在一个单元格数组中

% Generate structs and store in a cell array
myCellArray = cell(4,5);
myVectors = zeros(4,4);
for ii = 1:4
    tempStruct = createStruct();
    myCellArray{ii, 1} = tempStruct.Year;
    myCellArray{ii, 2} = tempStruct.PartOfYear;
    myCellArray{ii, 3} = tempStruct.PlantType;
    myCellArray{ii, 4} = tempStruct.String;
    myCellArray{ii, 5} = tempStruct.Number;
    myVectors(ii,:) = tempStruct.Vector;
end

您可以将
createStruct
函数替换为一些性质类似的
createStruct
函数。这可能需要在循环中指定各个字段,但如果实际数据更复杂(需要跟踪更多字段),则可能会使事情变得不那么清楚



一般来说,自动命名变量是个坏主意。您可以这样做(例如,通过使用
eval
函数),但它笨重、速度慢,需要调试问题,用户无法跟踪变量。在通用结构或单元数组中存储东西对于可用性和维护来说要好得多

不清楚您是如何初始化每个“操作”并存储结果的。您应该只返回一些struct或cell数组对象


函数生成结构:

% Operation x
function myStruct = createStruct()
    % ... other functionality here which actually generates the data values
    myStruct.Year = 2008;
    myStruct.PartOfYear = 2;
    myStruct.PlantType = 2;
    myStruct.String = 'randomstring';
    myStruct.Number = 0.5;
    myStruct.Vector = 1:4;
end
然后将所有结构放在一个单元格数组中

% Generate structs and store in a cell array
myCellArray = cell(4,5);
myVectors = zeros(4,4);
for ii = 1:4
    tempStruct = createStruct();
    myCellArray{ii, 1} = tempStruct.Year;
    myCellArray{ii, 2} = tempStruct.PartOfYear;
    myCellArray{ii, 3} = tempStruct.PlantType;
    myCellArray{ii, 4} = tempStruct.String;
    myCellArray{ii, 5} = tempStruct.Number;
    myVectors(ii,:) = tempStruct.Vector;
end

您可以将
createStruct
函数替换为一些性质类似的
createStruct
函数。这可能需要在循环中指定各个字段,但如果实际数据更复杂(需要跟踪更多字段),则可能会使事情变得不那么清楚


一般来说,自动命名变量是个坏主意。您可以这样做(例如,通过使用
eval
函数),但它笨重、速度慢,需要调试问题,用户无法跟踪变量。在通用结构或单元数组中存储东西对于可用性和维护来说要好得多