我有一个程序,它接受fints-object的列,在所有组合中成对地将它们相乘,并将结果输出到一个新的fints对象中。我有数据代码,但我也希望系列标签能够贯穿,以便a和b列的产品标有a * b。
function tsB = MulTS(tsA)
anames = fieldnames(tsA,1)';
A = fts2mat(tsA);
[i,j] = meshgrid(1:size(A,2),1:size(A,2));
B = Mul(A(:,i(:)),A(:,j(:)));
q = [anames(:,i(:)); anames(:,j(:))];
bnames = strcat(q(1,:),'*', q(2,:));
tsB=fints(tsA.dates, B, bnames);
end
我跑的时候会收到警告。
tsA= fints([1 2 3]', [[1 1 1]' [2 2 2]'],{'a','b'}');
MulTS(tsA)
??? Error using ==> fints.fints at 188
Illegal name(s) detected. Please check the name(s).
Error in ==> MulTS at 10
tsB=fints(tsA.dates, B, bnames);"
似乎Matlab不喜欢bnames的格式。我试过谷歌搜索“将单元格数组转换为字符串matlab”并尝试b = {bnames}之类的东西。我做错了什么?
答案 0 :(得分:3)
您的datanames
(bnames
中的MulTS
)似乎包含“*”字符,根据fints
documentation这是非法的:
datanames
数据系列名称的单元格数组。覆盖默认数据系列名称。默认数据系列名称为series1,series2等。
注意:并非所有字符串都被接受为datanames参数。支持的数据系列名称不能以数字开头,并且只能包含以下字符:
- 小写拉丁字母,a到z
- 大写拉丁字母,A到Z
- 下划线,_
尝试将“*”替换为“_”或其他内容。