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}
来获取名称。请注意花括号,因为这是一个单元阵列,而不是多维字符数组。
答
这里是一个单线,只是为了好玩。 @ Phonon的方式太明显了。
files = [arrayfun(@(x)strcat('chr',num2str(x),'.fa'),(1:22)','uni',0); 'chrX.fa']
答
下面是使用sprintf
和strsplit
一个更简洁的版本:
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"
P '完美!谢谢 – mortonjt
@Jamie,当你认为问题已经得到解答(并且可用的选项)后,答复好的答案并最终“接受”你认为最好的答案是有礼貌的。 – tmpearce