我有两段代码如下:
nodes = randsample ( n_nodes, round(j*n_nodes) )-1;
nodes_seqs = arrayfun (@transfer, nodes, 'UniformOutput', false );
nodes = num2str(nodes);
nodes = cellstr(nodes);
file_n = strcat('fasta','_','myfilename' ); % file name
fastawrite(strcat( file_n, '.fas' ), nodes, nodes_seqs);
另一个是:
nodes = 0 : n_nodes-1;
nodes_seqs = arrayfun (@transfer, nodes, 'UniformOutput', false );
nodes = num2str(nodes);
nodes = cellstr(nodes);
file_n = strcat('myfilename' ); % file name
fastawrite(strcat( file_n, '.fas' ), nodes, nodes_seqs);
第一个按预期运行。但是,我第二个错误。在检查变量之后,我在第二个中得到了这个,节点是一个1乘1的单元阵列。我很困惑。它是如何工作的第一个,而不是第二个?非常感谢您的时间和关注。
答案 0 :(得分:1)
在第二种情况下,由于节点是一个单元阵列,您需要使用
nodes = cell2mat(nodes)
而非num2str
,因为您的数据属于此类型的单元格而不是num。
以下是函数documentation on Mathworks
的链接其他选项包括cell2struct()
或cell2table()
答案 1 :(得分:0)
我明白了。这里的主要原因是:在第一部分中,randsample返回列向量,而在第二部分中,节点被初始化为行向量。添加转置后,它可以工作。