Error in close calculation and plotting

33 visualizaciones (últimos 30 días)
Nikita
Nikita el 16 de En. de 2026 a las 20:52
Editada: Walter Roberson hace alrededor de 9 horas
Hey,
I have been using this code and it has worked really well in the past. It is giving me an error now. I'm attaching the file, pasting the code and the linked error. It would be great to have some help!
% detrended correlated Rs>0.7
[UClass,~,idx] = unique(detrend_correl_07_slope_1.id,'stable');
XYc = accumarray(idx, (1:numel(idx)).', [], @(x){detrend_correl_07_slope_1(x,:)})
XYc{3}
for k = 1:numel(XYc)
B(:,k) = [XYc{k}{:,3} ones(size(XYc{k}{:,3}))] \ XYc{k}{:,4};
detrend_correl_07_slope_1(k) = B(1,k);
end
slope_ln_data_11
slope_ln_data_11 = slope_ln_data_11'
figure
tiledlayout(numel(XYc),1)
for k = 1:numel(XYc)
nexttile
plot(XYc{k}{:,3}, XYc{k}{:,4}, 'p')
hold on
L = [XYc{k}{:,3} ones(size(XYc{k}{:,3}))] * B(:,k);
plot(XYc{k}{:,3}, L, '-r')
hold off
grid
axis('padded')
title("Slope = "+slope_ln_data_11(k))
end
It's throwing up the following error for this line of code
detrend_correl_07_slope_1(k) = B(1,k);
Error using () (line 115)
Subscripting into a table using one subscript (as in t(i)) is not supported. Specify a row
subscript and a variable subscript, as in t(rows,vars). To select variables, use t(:,i) or for
one variable t.(i). To select rows, use t(i,:).

Respuesta aceptada

dpb
dpb el 16 de En. de 2026 a las 21:27
That code could never have worked as is if detrend_correl_07_slope_1 was a table. You used the .id variable dot referencing earlier in the call to unique, you need the same here...the dot has somehow gotten lost. Use
detrend_correl_07_slope_1.(k) = B(1,k);
to reference each column k in turn.

Más respuestas (1)

Umar
Umar el 17 de En. de 2026 a las 6:01
Editada: Walter Roberson hace 43 minutos
Hi @Nikita,I've identified the issue with your code. The error occurs because detrend_correl_07_slope_1 is a table, not a regular array. MATLAB tables cannot be indexed with single subscripts like detrend_correl_07_slope_1(k). They require two subscripts for rows and columns, or dot notation to access variables.
The problematic line is:
detrend_correl_07_slope_1(k) = B(1,k);
This worked previously because your data was likely imported as a numeric array rather than a table. Something has changed in how the data is being loaded or the MATLAB version you're using.
Here's the fix. Replace that line with this approach:
slope_ln_data_11 = zeros(numel(XYc), 1);
for k = 1:numel(XYc)
B(:,k) = [XYc{k}{:,3} ones(size(XYc{k}{:,3}))] \ XYc{k}{:,4};
slope_ln_data_11(k) = B(1,k);
end
Then if you need to add these slopes back to your table later, you can use:
detrend_correl_07_slope_1.slope = slope_ln_data_11';
This keeps your slope calculations in a regular numeric array where single-index subscripting works perfectly. The rest of your code should run without any changes.
According to the MathWorks documentation, tables require explicit row and column specification. You can access table data using table(rows, vars) syntax, curly braces table{rows, vars} to extract the underlying array, or dot notation table.VariableName for specific columns.
Let me know if you run into any other issues with this fix.

Categorías

Más información sobre Tables en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by