3

我有一个我想分析的文件列表。它们都被命名为 chr1.fa, chr2.fa, ... , chr22.fa, chrX.fa

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

files = ["chr"+str(x)+".fa" for x in range(1,22)]+["chrX.fa"]

我一直在尝试在 Matlab 中做同样的事情,这是一个令人尴尬的困难时期。否则,我将不得不像这样初始化文件:

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

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

任何关于我应该在哪里寻找的指针将不胜感激。

谢谢!

4

5 回答 5

3

这不像 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}. 请注意花括号,因为这是一个元胞数组,而不是多维字符数组。

于 2012-06-19T20:47:50.580 回答
3

sprintf这是使用and的更简洁的版本strsplit

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

files{end} = 'chrX.fa';
于 2012-06-19T23:18:35.323 回答
2

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

 files = [arrayfun(@(x)strcat('chr',num2str(x),'.fa'),(1:22)','uni',0); 'chrX.fa']
于 2012-06-19T20:59:54.503 回答
1

尝试:

files = [strtrim(cellstr(num2str((1:22)','chr%d.fa'))) ; 'chrX.fa']
于 2012-06-21T08:57:48.687 回答
0

旧主题,但从 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"
于 2018-01-18T21:21:04.437 回答