for循环字符串到整数

时间:2015-10-26 14:26:54

标签: matlab for-loop

我一直在努力寻找一种方法,使用MATLAB将字符串转换为.txt文件中的整数。

以下是我的文件的示例:

genes    total_muts
A2M      1
AARS     4
AASS     6
ABCA1    105
ABCA3    71
ABCA4    563

以下是我正在使用的脚本:

genes_disease = dataset('file', 'genes_totalshuffle.txt', 'Delimiter', '\t');
gene = genes_disease.genes
total_muts = genes_disease.total_muts
a = 0

fileID = fopen('genes_totalshuffled.txt', 'w')
for k = 1:length(genes_disease)
    total_muts1 = total_muts(k);
    num_total_muts = str2num(total_muts1)       
    r = randi([a num_total_muts],1);
    fprint(fileID, '%4f %4f\n', num_total_muts, r)
end
fclose(fileID)

当我运行此脚本时,出现错误,通知我randn的大小输入需要为数字。我认为我的问题在于totalmuts变量。此变量打印字符串而不是整数。我以为我可以使用str2num(),但我似乎无法让它正常工作。有什么建议吗?

*已编辑:包括我尝试使用str2num的方式。另外,我试图生成一个介于0和我文件中列出的值之间的随机生成的数字。

1 个答案:

答案 0 :(得分:3)

您可以使用randi生成0totalmuts之间的数字

r = randi([0 totalmuts]);

我必须将输入数据更改为CSV

genes,total_muts
A2M,1
AARS,4
AASS,6
ABCA1,105
ABCA3,71
ABCA4,563

然后代码

genes_disease = dataset('file', 'genes_totalshuffle.txt', 'Delimiter', ',');
gene = genes_disease.genes
total_muts = genes_disease.total_muts
a = 0

fileID = fopen('genes_totalshuffled.txt', 'w')
for k = 1:length(genes_disease)
    totalmuts = total_muts(k);
    genename = gene(k);
    r = randi([a totalmuts]);
    fprintf(fileID, '%4f %4f\n', totalmuts, r) % consider %d or %3d
end
fclose(fileID)

它对我来说很好,输出

1.000000 1.000000
4.000000 0.000000
6.000000 3.000000
105.000000 47.000000
71.000000 46.000000
563.000000 400.000000