MATLAB Answers

Accessing the values of a cell array stored in a table to make a new variable

19 views (last 30 days)
Consider the following table:
mytable =
2x3 table
Var1 Var2 c
_____ _____ _______________
true true {1000x1 double}
false true {1000x1 double}
c is a cell array.
How can I create a variable based off, for example, the first element of the c vector for each row? Specifically, if c was a vector of 1000x1 vector of ones in row 1 of mytable, I would want to make a variable v with scalar value 1 in row 1 of mytable, and if c was a vector of zeroes in row 2 of mytable, I would want to make v have scalar value 0 in row 2 of mytable.
I have been trying something along the lines of mytable.v = mytable.c(:, 1) to no avail. I'm not sure of the proper way to index the cell array within the table.
Also, are cell arrays the recommended datatype for this sort of task (storing vectors/matrices in a table)? For context, c is the output of a function, and I will need to pass it to other functions using rowfun. I would rather not store each of the 1000 elements of c in a separate variable, if possible.
Thanks in advance.
  1 Comment
Isaac Liu
Isaac Liu on 7 Apr 2021
I have accepted the answer below but am still interested in any comments about good practice for passing non-scalar cells (like c in this example) to rowfun
(Storing matrices/vectors in tables such that they are easy to feed to functions rowwise)

Sign in to comment.

Accepted Answer

Stephen Cobeldick
Stephen Cobeldick on 7 Apr 2021
Var1 = [true;false];
Var2 = [true;true];
c = {ones(1000,1);zeros(1000,1)};
T = table(Var1,Var2,c)
T = 2×3 table
Var1 Var2 c _____ _____ _______________ true true {1000×1 double} false true {1000×1 double}
T.v = cellfun(@(v)v(1),T.c)
T = 2×4 table
Var1 Var2 c v _____ _____ _______________ _ true true {1000×1 double} 1 false true {1000×1 double} 0

More Answers (0)

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!