我想从Toker等人的论文中应用带有particualr函数(chaos;https://figshare.com/s/80891dfb34c6ee9c8b34)的外部代码。2020年(https://www.nature.com/articles/s42003-019-0715-9#Sec1)为了检验我的数据是随机的还是混沌的。
我尝试过循环,for,cellfun,但是在这种情况下,这些循环都不起作用。
当我试图使用以下代码时:
T = readtable('ibfrq3.csv');
C = table2array(T);
D = num2cell(C, 2);
rowSums = cellfun(@sum, D)
chaos = cellfun(@chaos, D)我收到了三个错误:
Unable to perform assignment because the size of the left side is 1-by-14 and the size of the right side is
1-by-3.
Error in chaos>surrogate (line 989)
surr(k,:)=unwrap(horzcat(st,parts{randperm(j)},en));
Error in chaos (line 157)
[surr, params] = surrogate(zscore(surr_y), num_surr, 'CPP', 1, 1); 有趣的是,我能够使函数工作,但只适用于不同的行(方法是将它们复制到方括号中并标记为y(例如,y = [1,2,3,4,5,6,7,8,9,5,6,7,8,8]) )。
我想要的输出是一个字符串(或者理想情况下是一个添加到我的.csv中的列),它的chaos函数输出(每一行一个单词:“随机”或“混沌”(取决于结果))。
我的数据可以在这里获得:https://drive.google.com/file/d/1I2BChrv0iqNr1dcEKTQKxKF7DDl_hF23/view?usp=sharing,.csv由不同时期的等位基因频率组成。
编辑:尝试
numRows = size(C, 1);
for row = 1:numRows
result(row) = chaos(C(row,:));
end产生了类似于上面的错误。
我还尝试在我的数据上逐行运行代码,以检查哪一行使用
row1 = C(1,:);
chaos(row1)每一排。有趣的是,它为第1行、第3-9行、第11-100行提供了理想的输出。第二行和第十行与其他行没有区别,不包含任何特殊字符或值。我不知道他们怎么了。
发布于 2022-01-05 10:01:50
cellfun (及其近亲arrayfun)在这里不合适,因为它们分别对数组的每个元素应用一个函数,而您希望对每一行应用一个函数。另外,您正在为chaos分配一个值,它已经是一个函数的名称,这很可能导致混淆行为。
如果C是一个m数值数组,而chaos是一个以行向量作为输入并返回标量值作为输出的函数,那么
numRows = size(C, 1);
for row = 1:numRows
result(row) = chaos(C(row,:));
end将创建一个1×m向量result,其中包含每个C行的函数输出。
如果chaos函数返回字符向量,则需要将结果存储在单元格数组中,方法是将循环中的行更改为
result{row} = chaos(C(row,:));但是,添加到问题中的错误消息表明还有另一个问题,因为它告诉我们chaos函数中的操作正在失败。如果您说当您一次给出一行数据时,chaos似乎正常工作,那么要么您的数组C不包含您认为它所做的事情,要么是有一行数据导致它由于某种原因而失败。你需要调试这个。首先,您可以在循环中添加一个disp(row),这将显示导致错误的C行。
https://stackoverflow.com/questions/70558096
复制相似问题