1

我目前正在做一个项目,我必须在 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 中所做的事情?

我希望我足够清楚,我发现它有点难以解释。

4

3 回答 3

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]
于 2013-09-19T10:48:57.590 回答
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]
于 2013-09-19T13:18:14.417 回答
0

如果这可以解决您的问题,请不要现在,但在 Matlab 中您可以执行以下操作

oupt = {123, 456, 'string1', 'string2', 789}

只需使用大括号而不是方括号。

于 2013-09-19T10:20:37.300 回答