我目前正在开发一个项目,我必须在Matlab和R中编写相同的工具并比较两个软件选项。
我从R开始,现在我正在将代码翻译成Matlab,但我现在仍处于最重要的部分。工具在进行分析后创建的输出文件。
基本上,我的工具进行循环n
次的分析,并且在每次循环之后我得到许多进入输出表的变量。所以,更清楚的是,在每个循环之后我得到变量:
A = 123
B = 456
C = 'string1'
D = 'string2'
E = 789
每个循环后每个变量的值都会发生变化,我只想说清楚变量是数值和字符串值,因为这是导致我出问题的原因。
在R
每个循环后我做的是:
outp <- cbind(A,B,C,D,E)
创建一个包含水平排列的单元格中每个变量的数据框,然后在新数据框中垂直添加每个循环的结果:
outp2 <- rbind(outp2,outp)
所以最后我得到一个数据框(outp2
),其中包含A,B,C,D,E列和n
行,每行包含每个变量的值。因此,在循环过程结束时,我可以使用write.csv
函数并创建一个包含数字和字符串列的outp2
输出文件。
我试图在Matlab中做到这一点,但我找不到一个可以像我在R中那样加入数据的函数,因为使用括号'[]'
只允许我加入数字类型的变量。所以基本上我的问题是:我怎样才能在Matlab中复制我在R中做的事情?
我希望我很清楚,我发现它有点难以解释。
答案 0 :(得分:0)
现在不要解决你的问题,但是在Matlab中你可以做像
这样的事情oupt = {123, 456, 'string1', 'string2', 789}
只需使用花括号而不是方括号。
答案 1 :(得分:0)
您可以使用单元格数组附加输出,首先使用大括号来声明单元格格式(空{}
或包含数据{...}
),然后使用括号[...]
进行连接输出(使用;
后其他一行)。
out_array = {}; %initialize empty
%vertical concatenation with ";"
for ii = 1:3
out_array = [out_array; {123, 456, 'string1', 'string2', 789}];
end
这给出了
out_array =
[123] [456] 'string1' 'string2' [789] [123] [456] 'string1' 'string2' [789] [123] [456] 'string1' 'string2' [789]
答案 2 :(得分:0)
正如他们之前所说,使用花括号来创建一个单元格数组。我想A,B,C,D和E是你的表头,你已经拥有了它们下面的数据,所以我会这样做:
outp = { A , B , C , D , E };
# This next step is only to have some data...
outp2 = magic(5);
outp2 = num2cell(outp2);
output = [ outp ; outp2 ]
output =
[123] [456] 'string1' 'string2' [789]
[ 17] [ 24] [ 1] [ 8] [ 15]
[ 23] [ 5] [ 7] [ 14] [ 16]
[ 4] [ 6] [ 13] [ 20] [ 22]
[ 10] [ 12] [ 19] [ 21] [ 3]
[ 11] [ 18] [ 25] [ 2] [ 9]