matlab字符串数组

问题描述:

我有我想分析的文件列表。他们都被命名为chr1.fa,chr2.fa,...,chr22.fa,chrX.famatlab字符串数组

我想将所有这些文件名存储在一个数组中。我知道在Python,你可以做

文件= “CHR” + STR(X)+ “FA” 在范围X(1.22)] + [ “chrX.fa”]

我一直有一个令人尴尬的困难时间试图在Matlab中做等效。否则,我将不得不像初始化文件:

文件= { 'chr1.fa', 'chr2.fa',..., 'chr22.fa', 'chrX.fa'}

这是真的不理想,因为我可能正在处理更多的文件。

任何指针,我应该看的地方将不胜感激。

谢谢!

这不完全像Python一样紧凑,但它会为你做这项工作。

N = 20; 

prefix = 'chr'; 
suffix = '.fa'; 

names = cell(N,1); 

for n = 1:N 
    names{n} = [prefix int2str(n) suffix]; 
end 

names{N+1} = [prefix 'X' suffix]; 

您可以通过names{index}来获取名称。请注意花括号,因为这是一个单元阵列,而不是多维字符数组。

+0

P '完美!谢谢 – mortonjt

+3

@Jamie,当你认为问题已经得到解答(并且可用的选项)后,答复好的答案并最终“接受”你认为最好的答案是有礼貌的。 – tmpearce

这里是一个单线,只是为了好玩。 @ Phonon的方式太明显了。

files = [arrayfun(@(x)strcat('chr',num2str(x),'.fa'),(1:22)','uni',0); 'chrX.fa'] 

下面是使用sprintfstrsplit一个更简洁的版本:

files = strsplit(sprintf('chr%i.fa ',1:22),' '); 

files{end} = 'chrX.fa'; 

尝试:

files = [strtrim(cellstr(num2str((1:22)','chr%d.fa'))) ; 'chrX.fa'] 

老话题了,但开始在16B,采用新的字符串数据类型使这很容易:

>> files = ["chr" + (1:22) + ".fa", "chrX.fa"]' 

files = 

    23×1 string array 

    "chr1.fa" 
    "chr2.fa" 
    "chr3.fa" 
    "chr4.fa" 
    "chr5.fa" 
    "chr6.fa" 
    "chr7.fa" 
    "chr8.fa" 
    "chr9.fa" 
    "chr10.fa" 
    "chr11.fa" 
    "chr12.fa" 
    "chr13.fa" 
    "chr14.fa" 
    "chr15.fa" 
    "chr16.fa" 
    "chr17.fa" 
    "chr18.fa" 
    "chr19.fa" 
    "chr20.fa" 
    "chr21.fa" 
    "chr22.fa" 
    "chrX.fa"