Undefined function or variable 'isempty'.

Hello all, I'm using version 2016a and have encountered some behaviour I've never seen before. I'm trying to check an excel spreadsheet to see if an entry already exists for a given serial number before adding a new entry. The problem section is:
recordsTable = readtable(FILE_ADDRESS, 'Sheet', systemSheet, 'Range', 'A:I'); % This reads in the data in a table
existingRecord = find(recordsTable.SerialNumbers == projectNum); % This finds any entries which match a given numerical value
if isempty(existingRecord) % This returns the error: Undefined function or variable 'isempty'.
...
end
I've used breakpoints to check and existingRecord is empty when isempty is called on it. Indeed, if I place a breakpoint on the problem line and then call isempty(existingRecord) from the command line instead of letting the script continue it works perfectly and returns a 1 as expected. Running each line individually from the command line also works and returns a 1 as expected. It is only when used as part of a script that MATLAB refuses to recognize isempty, despite it being a default function.
I have checked and isempty is on the MATLAB path as it should be. It is included as a built-in function in version 2016a, and my license is current. I've triple checked my spelling of all function and variable names and have spent several hours googling what could be wrong to no avail. No part of my code alters the path, and I'm not trying to use isempty or any variation thereof as a variable name. Any advice would be appreciated as at this point I have no idea why isempty seems to be unusable in a script, despite several hours of googling and reading documentation.

7 Commenti

Do you get something unexpected from the command
which -all isempty
built-in (/MATLAB/toolbox/matlab/elmat/isempty) built-in (/MATLAB/toolbox/matlab/elmat/@double/isempty) % double method built-in (/MATLAB/toolbox/matlab/elmat/@int16/isempty) % int16 method built-in (/MATLAB/toolbox/matlab/elmat/@int32/isempty) % int32 method built-in (/MATLAB/toolbox/matlab/elmat/@int64/isempty) % int64 method built-in (/MATLAB/toolbox/matlab/elmat/@int8/isempty) % int8 method built-in (/MATLAB/toolbox/matlab/elmat/@logical/isempty) % logical method built-in (/MATLAB/toolbox/matlab/elmat/@single/isempty) % single method built-in (/MATLAB/toolbox/matlab/elmat/@uint16/isempty) % uint16 method built-in (/MATLAB/toolbox/matlab/elmat/@uint32/isempty) % uint32 method built-in (/MATLAB/toolbox/matlab/elmat/@uint64/isempty) % uint64 method built-in (/MATLAB/toolbox/matlab/elmat/@uint8/isempty) % uint8 method isempty is a built-in method % string method isempty is a built-in method % dictionary method /MATLAB/toolbox/matlab/codetools/@mtree/isempty.m % mtree method /MATLAB/toolbox/matlab/datatypes/categorical/@categorical/isempty.m % categorical method /MATLAB/toolbox/matlab/datatypes/tabular/@tabular/isempty.m % tabular method /MATLAB/toolbox/matlab/datatypes/datetime/@datetime/datetime.m % datetime method /MATLAB/toolbox/matlab/datatypes/duration/@duration/duration.m % duration method isempty is a built-in method % connector.internal.LoggerLevel method isempty is a built-in method % matlab.internal.lang.capability.Capability method isempty is a built-in method % matlab.lang.OnOffSwitchState method isempty is a built-in method % containers.Map method /MATLAB/toolbox/matlab/lang/+matlab/+mixin/@Scalar/Scalar.m % matlab.mixin.Scalar method /MATLAB/toolbox/matlab/indexing/+matlab/+mixin/+indexing/@RedefinesParen/isempty.m % matlab.mixin.indexing.RedefinesParen method isempty is a built-in method % matlab.internal.reference.property.RefEntityType method isempty is a built-in method % matlab.internal.reference.api.EntityPrecision method isempty is a built-in method % matlab.internal.reference.property.DeprecationStatus method isempty is a built-in method % matlab.internal.reference.property.FunctionType method isempty is a built-in method % matlab.internal.reference.api.EntityCaseSensitivity method isempty is a built-in method % mf.zero.meta.Language method isempty is a built-in method % dig.config.CommandType method isempty is a built-in method % dig.config.HorizontalAlignment method isempty is a built-in method % dig.model.DisplayState method isempty is a built-in method % dig.model.EventDataType method isempty is a built-in method % dig.model.FunctionType method isempty is a built-in method % dig.model.ValidInBdType method isempty is a built-in method % dig.model.ViewMode method isempty is a built-in method % simulink.FindSystemTask.Status method isempty is a built-in method % Simulink.data.adapters.AdapterDiagnostic method isempty is a built-in method % Simulink.data.adapters.ChangeType method isempty is a built-in method % sl.data.adapter.AdapterType method isempty is a built-in method % sl.data.srccache.CacheUpdateResult method isempty is a built-in method % sl.data.srccache.cachemgr.CacheStatus method isempty is a built-in method % sl.data.srccache.cachemgr.SourceFileStatus method isempty is a built-in method % slid.SourceIssue method isempty is a built-in method % slid.broker.SourceManagerSourceKind method isempty is a built-in method % slid.broker.SourceStatus method isempty is a built-in method % dastudio_util.cooperative.AsyncFunctionRepeaterTask.Status method isempty is a built-in method % coderdictionary.data.AccessFunctionSignaturesEnum method isempty is a built-in method % coderdictionary.data.AccessInterfaceEnum method isempty is a built-in method % coderdictionary.data.AccessModeEnum method isempty is a built-in method % coderdictionary.data.AllowedAccessEnum method isempty is a built-in method % coderdictionary.data.DataAccessEnum method isempty is a built-in method % coderdictionary.data.DataAccessTypeEnum method isempty is a built-in method % coderdictionary.data.DataInitEnum method isempty is a built-in method % coderdictionary.data.DataInstantiationEnum method isempty is a built-in method % coderdictionary.data.LatchingModeEnum method isempty is a built-in method % coderdictionary.data.PlacementEnum method isempty is a built-in method % coderdictionary.data.ScopeEnum method isempty is a built-in method % coderdictionary.data.StatementsSurroundEnum method isempty is a built-in method % coderdictionary.data.StatusEnum method isempty is a built-in method % matlab.unittest.Verbosity method isempty is a built-in method % matlab.unittest.internal.fixtures.FolderScope method isempty is a built-in method % matlab.internal.timer.CallBackTypeEnum method isempty is a built-in method % matlab.internal.timer.BusyModeEnum method isempty is a built-in method % matlab.internal.timer.ExecutionModeEnum method /MATLAB/toolbox/nnet/deep/+deep/+internal/+recording/@RecordingArray/isempty.m % deep.internal.recording.RecordingArray method /MATLAB/toolbox/matlab/bigdata/@tall/isempty.m % tall method /MATLAB/toolbox/matlab/timeseries/@tscollection/isempty.m % tscollection method /MATLAB/toolbox/curvefit/curvefit/@fittype/isempty.m % fittype method /MATLAB/toolbox/finance/ftseries/@fints/isempty.m % fints method /MATLAB/toolbox/ident/ident/@iddata/isempty.m % iddata method /MATLAB/toolbox/ident/idobsolete/@idarx/isempty.m % idarx method /MATLAB/toolbox/ident/nlident/@idnlgrey/isempty.m % idnlgrey method /MATLAB/toolbox/mpc/mpc/@mpc/isempty.m % mpc method /MATLAB/toolbox/parallel/gpu/@gpuArray/isempty.m % gpuArray method /MATLAB/toolbox/parallel/lang/@Composite/isempty.m % Composite method /MATLAB/toolbox/parallel/parallel/@distributed/isempty.m % distributed method /MATLAB/toolbox/parallel/parallel/@codistributed/isempty.m % codistributed method /MATLAB/toolbox/shared/statslib/@dataset/isempty.m % dataset method
Maybe a duplicate of the function made by you ?
Please post a copy of the complete error message.
KG
KG il 17 Gen 2023
Modificato: KG il 17 Gen 2023
Torsten, I don't know how that would have happened. I've never knowingly duplicated any function and I've never used isempty as a function name. Furthermore this script, including this problem line, was working just fine yesterday and earlier today and I haven't created any new functions, or touched any toolboxes since.
built-in (C:\Program Files\MATLAB\R2016a\toolbox\matlab\elmat\isempty)
C:\Program Files\MATLAB\R2016a\toolbox\matlab\datatypes\@table\isempty.m % table method
C:\Program Files\MATLAB\R2016a\toolbox\matlab\codetools\@mtree\isempty.m % mtree method
C:\Program Files\MATLAB\R2016a\toolbox\matlab\timefun\@datetime\datetime.m % datetime method
isempty is a built-in method % containers.Map method
C:\Program Files\MATLAB\R2016a\toolbox\matlab\datatypes\@categorical\isempty.m % categorical method
C:\Program Files\MATLAB\R2016a\toolbox\matlab\iofun\@timer\isempty.m % timer method
C:\Program Files\MATLAB\R2016a\toolbox\matlab\timeseries\@tscollection\isempty.m % tscollection method
C:\Program Files\MATLAB\R2016a\toolbox\comm\comm\@gf\isempty.m % gf method
C:\Program Files\MATLAB\R2016a\toolbox\curvefit\curvefit\@fittype\isempty.m % fittype method
C:\Program Files\MATLAB\R2016a\toolbox\distcomp\parallel\@distributed\isempty.m % distributed method
C:\Program Files\MATLAB\R2016a\toolbox\distcomp\parallel\@codistributed\isempty.m % codistributed method
C:\Program Files\MATLAB\R2016a\toolbox\distcomp\lang\@Composite\isempty.m % Composite method
C:\Program Files\MATLAB\R2016a\toolbox\distcomp\gpu\@gpuArray\isempty.m % gpuArray method
C:\Program Files\MATLAB\R2016a\toolbox\finance\ftseries\@fints\isempty.m % fints method
C:\Program Files\MATLAB\R2016a\toolbox\ident\ident\@iddata\isempty.m % iddata method
C:\Program Files\MATLAB\R2016a\toolbox\ident\nlident\@idnlgrey\isempty.m % idnlgrey method
C:\Program Files\MATLAB\R2016a\toolbox\ident\idobsolete\@idarx\isempty.m % idarx method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbc\@xregpointer\isempty.mexw64 % xregpointer method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbc\@xregpointer\isempty.m % xregpointer method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbc\@junit\isempty.m % junit method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbc\@guidarray\isempty.m % guidarray method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcdata\@cgrules\isempty.m % cgrules method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcdata\@cgoptcsol\isempty.m % cgoptcsol method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcdata\@cgoppoint\isempty.m % cgoppoint method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcdata\@cgcaloutput\isempty.m % cgcaloutput method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcdesign\@des_constraints\isempty.m % des_constraints method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcexpr\@cgvariable\isempty.m % cgvariable method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcexpr\@cgnormfunction\isempty.m % cgnormfunction method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcexpr\@cgnormaliser\isempty.m % cgnormaliser method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcexpr\@cgmswitchexpr\isempty.m % cgmswitchexpr method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcexpr\@cgmodexpr\isempty.m % cgmodexpr method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcexpr\@cglookuptwo\isempty.m % cglookuptwo method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcexpr\@cgfuncexpr\isempty.m % cgfuncexpr method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcexpr\@cgfeature\isempty.m % cgfeature method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcexpr\@cgexpr\isempty.m % cgexpr method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbclayouts\@xregcontainer\isempty.m % xregcontainer method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbcmodels\@xregcovariance\isempty.m % xregcovariance method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbctools\@sweepsetfilter\isempty.m % sweepsetfilter method
C:\Program Files\MATLAB\R2016a\toolbox\mbc\mbctools\@sweepset\isempty.m % sweepset method
C:\Program Files\MATLAB\R2016a\toolbox\mpc\mpc\@mpc\isempty.m % mpc method
C:\Program Files\MATLAB\R2016a\toolbox\shared\statslib\@dataset\isempty.m % dataset method
Jan, the complete error is:
Undefined function or variable 'isempty'.
Error in controlDocUpdate (line 247)
if isempty(existingRecord)
That's all it gives me.
Do you have a variable named isempty at any point? Possibly accidentally assign to it?
Walter, I don't know exactly why this worked, but I think you have inadvertently helped me solve it. I didn't have isempty assigned as a variable anywhere, but while I ctrl-f'd to double check I noticed that in a completely different if statement it was written as
isempty{existingRecord}
instead of
isempty(existingRecord)
Switching to parentheses instead of curly braces did something and now it works again. My (admittedly very limited) understanding is that culy braces only tell matlab that it's a cell array so I have no idea why that made it so that MATLAB couldn't recognize the function in a completely different part of the script, but it's working as intended now. Thanks!
When matlab saw {} in the code it deduced that isempty must be a variable, and so it does not search the path looking for it as a function.

Accedi per commentare.

Risposte (0)

Categorie

Prodotti

Release

R2016a

Richiesto:

KG
il 17 Gen 2023

Commentato:

il 17 Gen 2023

Community Treasure Hunt

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

Start Hunting!

Translated by