Find function - how to use or index to a return when "Find" cannot find anything.

71 visualizaciones (últimos 30 días)
We have some sophisticated isotope hardware coupled to the most useless software imaginable. I have written some code to identify a series of retention times, fill out a new column of RT's for cross matching and also fill in the compound names for identification. Where chromatographic peaks are too close to separate by retention time alone I have added the facility to look for the largest peak size or first or last on a doublet.
But I want the code to show 'not found' values if the FIND function can't find a value at all. Sometimes a peak is missing. This way, all my data files will be the same length.
In the portion of code here, it all works fine until you change the first IF statement to elseif and insert the new IF statement above it that seeks to identify when FIND doesn't find. I have tried a few things including ISEMPTY in the first IF statement. But while this works fine in the command window, coupled inside the IF statement it won't work.
I need some way to identify a missing value for RTidx. Anyone?
start = 1;
finish = loc(1);
R = rt(start:finish);
for C = [1:10, 13, 14, 15, 17:18, 20:22];
RTidx = find(R >= S(C) & R <= E(C));
if RTidx = [ ];
name(RTidx) = not_found(C);
elseif (length(RTidx)>1);
[junk, i] = max(mv(RTidx));
rt_fill(RTidx(i)) = rt(RTidx(i));
name(RTidx(i)) = amino_list(C);
else
rt_fill(RTidx) = rt(RTidx);
name(RTidx) = amino_list(C);
end;
RT_FILL(LISTidx) = rt_fill;
NAME_FILL(LISTidx) = name;
end
  1 comentario
bym
bym el 26 de Oct. de 2011
I don't know if it makes a difference, but it looks like you have [ ](a space in the empty matrix). can you try [] (no space)

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 26 de Oct. de 2011
Your line
if RTidx = [ ];
would attempt to assign the empty array to RTidx, which is not something you can do in an "if" statement.
if isempty(RTidx)
is the appropriate test.
You might want to cross-check with size(RTidx) and class(RTidx) to see what is happening.
  1 comentario
Rhys Leeming
Rhys Leeming el 27 de Oct. de 2011
As a beginner, the help browser does not make it clear (or give examples) that the ISEMPTY function can be just a query without the need for an = sign.
ISEMPTY has worked fine. Thanks!

Iniciar sesión para comentar.

Más respuestas (1)

the cyclist
the cyclist el 26 de Oct. de 2011
I would think the best way to do this would be with the isempty() command, but you don't show what you tried there.
However, I also notice that you have used
if RTidx = []
rather than
if RTidx == []
You need the doubled equal sign for checking equality. A single equal sign is for assignment.
  1 comentario
Rhys Leeming
Rhys Leeming el 27 de Oct. de 2011
As a beginner, the help browser does not make it clear (or give examples) that the ISEMPTY function can be just a query without the need for an = sign.
Trying to query the index with RTidx == [] didn't work. Thanks anyway.
ISEMPTY has worked.

Iniciar sesión para comentar.

Categorías

Más información sobre Entering Commands 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