¿Cómo aplicar una función compleja a cada fila de un archivo .csv en MATLAB?
Me gustaría aplicar un código externo con una función específica (chaos
; https://figshare.com/s/80891dfb34c6ee9c8b34) de un artículo de Toker et al. 2020 (https://www.nature.com/articles/s42003-019-0715-9#Sec1) para probar si mis datos son estocásticos o caóticos.
He intentado usar bucles, for
, cellfun
, pero ninguno de ellos funciona en este caso.
Cuando intenté utilizar el siguiente código:
T = readtable('ibfrq3.csv');
C = table2array(T);
D = num2cell(C, 2);
rowSums = cellfun(@sum, D)
chaos = cellfun(@chaos, D)
Recibí tres errores:
No se puede realizar la asignación porque el tamaño del lado izquierdo es 1 por 14 y el tamaño del lado derecho es 1 por 3.
Error en chaos>surrogate (línea 989)
surr(k,:)=unwrap(horzcat(st,parts{randperm(j)},en));
Error en chaos (línea 157)
[surr, params] = surrogate(zscore(surr), numsurr, 'CPP', 1, 1);
Curiosamente, puedo hacer que la función funcione, pero solo para filas separadas (copiándolas entre corchetes y etiquetándolas como y, por ejemplo y = [1,2,3,4,5,6,7,8,9,5,6,7,8,8]
).
Mi resultado deseado es una cadena de texto (o idealmente una columna agregada a mi archivo .csv) con las salidas de la función chaos
(una palabra por fila: ‘estocástico’ o ‘caótico’, dependiendo del resultado).
Mis datos están disponibles aquí: https://drive.google.com/file/d/1I2BChrv0iqNr1dcEKTQKxKF7DDl_hF23/view?usp=sharing
El archivo .csv consta de frecuencias alélicas en diferentes períodos de tiempo.
EDIT:
Intentando
numRows = size(C, 1);
for row = 1:numRows
result(row) = chaos(C(row,:));
end
Obtuve errores similares a los mencionados anteriormente.
También intenté ejecutar el código fila por fila en mis datos para verificar qué fila causa problemas utilizando
row1 = C(1,:);
chaos(row1)
para cada fila. Curiosamente, funciona perfectamente y da el resultado deseado para las filas no. 1, 3-9 y 11-100. Las filas no. 2 y no. 10 no son diferentes de las demás y no contienen ningún carácter o valor especial. No tengo idea de qué está mal con ellas.
davy.ai
Parece que el problema que estás enfrentando está relacionado con el formato de entrada de la función
chaos
. A partir de tus intentos, es evidente que la función solo funciona con filas de datos individuales proporcionadas como arrays separados.Una forma de solucionar este problema es hacer un bucle a través de cada fila de tu conjunto de datos de entrada, aplicar la función
chaos
a esa fila específica y almacenar el resultado en un nuevo array. Aquí tienes un ejemplo de código que puedes modificar para que se ajuste a tus requisitos específicos:Este código debería iterar a través de cada fila del conjunto de datos de entrada, aplicar la función
chaos
a esa fila y almacenar el resultado en la fila correspondiente del array de celdasresult
. Una vez que se completa el bucle, puedes escribir el arrayresult
en una nueva columna de tu archivo de entrada.Si sigues enfrentando problemas con filas específicas que causan errores, puedes intentar depurar esas filas por separado. Una posible razón de los errores podría ser la falta de valores o valores no válidos en esas filas. Puedes intentar verificar el formato y el contenido de esas filas para identificar cualquier problema.