isempty: Not enough input arguments.
9 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Dear All,
I have an empty structure x.y.z
isfield(x.y, 'z') is logical 1, but
isempty(x.y.z) gives me this error:
Error using isempty
Not enough input arguments.
How to check that z is empty? Thank you,
OL
1 Commento
Adam Danz
il 19 Mar 2020
You shouldn't get that error.
x.y.z = [];
isfield(x.y,'z') % = true
isempty(x.y.z) % = true
Confirm that you're using Matlab's isempty function.
which isempty -all
The output should include a list of built-in functions/methods.
Risposta accettata
Steven Lord
il 19 Mar 2020
The problem is not that the field z of x.y is empty. The problem is that the field y of x is. In the example below, due to the behavior of the struct constructor when one of the values of the fields is a cell array, x.y is a 0-by-0 struct array.
x.y = struct('z', {});
size(x.y) % [0 0]
When S is a struct array with a field T, S.T makes what's known as a comma-separated list with one element per element of S. Consider:
q.y = struct('z', 1);
{q.y.z} % {1}
w.y = struct('z', {2, 3:4});
{w.y.z} % {2, [3 4]}
As that documentation page states, when you create a comma-separated list you can pass it into a function as the input arguments, one input per element in the comma-separated list.
plus(w.y.z) % equivalent of plus(2, [3 4])
So when the struct from which you create the comma-separated list is empty, as it is if I were to create one from x.y, that's like calling the function with no inputs.
isempty(x.y.z) % equivalent of isempty()
isempty requires you to call it with an input.
Check that x.y has some data (is not empty, or better yet isscalar) before you start asking questions about its data.
0 Commenti
Più risposte (2)
Fangjun Jiang
il 19 Mar 2020
Do you have an example data?
>> x.y.z=[]
x =
struct with fields:
y: [1×1 struct]
>> isempty(x.y.z)
ans =
logical
1
0 Commenti
Image Analyst
il 19 Mar 2020
It should work. See this:
% Assign x.y.z to some value.
x.y.z = 10
tf = isempty(x.y.z) % Shows false
% Now make field z empty.
x.y.z = []; % Null, empty
tf = isempty(x.y.z) % Shows true
% Remove the field z
x.y = rmfield(x.y, 'z')
tf = isempty(x.y.z) % Throws error
Attach your data if you still have trouble.
0 Commenti
Vedere anche
Categorie
Scopri di più su Structures in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!