table on workspace isn't recognized as table

Hi,
I have a question that puzzles me.
On my workspace I have a table as such:
name value
left_precentral_betas 25x8 table
and this is how I created it:
left_precentral_betas = table(left_precentral(:,1),left_precentral(:,2),left_precentral(:,3)...
,left_precentral(:,4),left_precentral(:,5),left_precentral(:,6),...
left_precentral(:,7),left_precentral(:,8), 'VariableNames',...
{'Right Palm Medial', 'Right Back Medial','Left Palm Medial',...
'Left Back Medial','Right Palm Lateral','Right Back Lateral'...
,'Left Palm Lateral','Left Back Lateral'}) ;
yet I can't use writetable function:
writetable(left_precentral_betas,[PATHOUT,'left_motor.txt']);
I get this error:
Error using writetable (line 139)
First argument must be a table.
istable(left_precentral_betas);
gives me 0. If it's not a table, why it's defined as table in my workspace?
If I'm defining the table wrongly, why do I have it as table in my workspace?
and how can I write or save this table/non table as .txt?
Kind regards,
Hatice

6 件のコメント

Walter Roberson
Walter Roberson 2020 年 2 月 4 日
What shows up for
class(left_precentral_betas)
Hatice Sahin
Hatice Sahin 2020 年 2 月 4 日
ans =
'table'
Guillaume
Guillaume 2020 年 2 月 4 日
Note that this won't solve your problem at all but a much simpler way to construct your table would be with:
%if size(left_precental, 2) is 6:
left_precentral_betas = array2table(left_precentral, 'VariableNames', {'Right Palm Medial', 'Right Back Medial', 'Left Palm Medial', 'Left Back Medial', 'Right Palm Lateral', 'Right Back Lateral', 'Left Palm Lateral', 'Left Back Lateral'});
%if not
left_precentral_betas = array2table(left_precentral(:, 1:6), 'VariableNames', {'Right Palm Medial', 'Right Back Medial', 'Left Palm Medial', 'Left Back Medial', 'Right Palm Lateral', 'Right Back Lateral', 'Left Palm Lateral', 'Left Back Lateral'});
Now, with regards to your problem, can you issue at the command prompt
dbstop if error
then attempt to write the table. When it errors, it will stop in the debugger inside writetable. At this point, what is
class(T)
Also, what is
which istable -all
Hatice Sahin
Hatice Sahin 2020 年 2 月 4 日
Hi,
Thank you very much for your tips!
Soo, I assume I should have written class(data) instead of class(T) because I had only data, msg and writeFunctionName left on my workspace. So I did;
K>> class(data)
ans =
'table'
K>> which istable -all
..myfoldernames\spm12\external\fieldtrip\compat\matlablt2013b\istable.m
C:\Program Files\MATLAB\R2019b\toolbox\matlab\datatypes\istable.m % Shadowed
Looks like the toolbox I used to analyze my data (spm12) somehow interferes with this function. How can I get rid of it?
Kind regards,
Hatice
Walter Roberson
Walter Roberson 2020 年 2 月 4 日
You should remove spm12\external\fieldtrip\compat\matlablt2013b from your path . It is intended as compatibility functions for use with versions before R2013b.
Hatice Sahin
Hatice Sahin 2020 年 2 月 5 日
I removed it from the path and it works perfect now. Thank you very much!

サインインしてコメントする。

 採用された回答

Guillaume
Guillaume 2020 年 2 月 4 日

0 投票

"Soo, I assume I should have written class(data)"
No, if you'd followed my instruction, when the error occured matlab should have entered the debugger in the workspace of writable (because of the dbstop if error you issued earlier). Within the workspace of writetable, your original variables don't exist and the table is called T. At least, in R2019b and I assume in previous versions as well.
Anyway, as the which shows, the problem is that the fieldtrip toolbox overrides the built-in istable with its own incompatible version.
From other questions I've seen here, the fieldtrip toolbox has a nasty habit of overriding matlab built-in functions with its own incompatible version. isrow was a particular nasty one I've seen as it prevented proper matlab startup.

1 件のコメント

Hatice Sahin
Hatice Sahin 2020 年 2 月 5 日
It works now! Thank you very much for your help.

サインインしてコメントする。

その他の回答 (2 件)

Subhadeep Koley
Subhadeep Koley 2020 年 2 月 4 日

0 投票

As far as my knowledge goes MATLAB does not support Blank Space in variable names. It can only contain letters, numbers or underscore. Blank spaces or symbols are not allowed. Therefore it should throw error when you are passing 'Right Palm Medial' as a variable name.
Give the below code a try. I'm not getting any error in my end with the code below.
clc;
% 20-by-20 Random data
left_precentral = rand(20, 20);
% Make the table
left_precentral_betas = table(left_precentral(:, 1), left_precentral(:, 2), left_precentral(:, 3),...
left_precentral(:, 4), left_precentral(:, 5), left_precentral(:, 6),...
left_precentral(:, 7), left_precentral(:, 8), 'VariableNames',...
{'RightPalmMedial', 'RightBackMedial', 'LeftPalmMedial',...
'LeftBackMedial', 'RightPalmLateral', 'RightBackLateral',...
'LeftPalmLateral', 'LeftBackLateral'});
% Write the table
writetable(left_precentral_betas, [PATHOUT, 'left_motor.txt']);

4 件のコメント

Hatice Sahin
Hatice Sahin 2020 年 2 月 4 日
Hi,
Thank you very much for your answer.
I have fixed my code and tried, got the same error. Then I cleared variables and directly copied your working code and tried but unfortunately, I still get the same error that says "the first argument must be a table".
Interesting that it works on yours while the very same code doesn't work on mine. I'm using 2019b btw.
Kind regards,
Hatice
Walter Roberson
Walter Roberson 2020 年 2 月 4 日
編集済み: Walter Roberson 2020 年 2 月 4 日
R2019b and later do support arbitrary character vectors for variable names. (It appears that the limit is still 63 characters per name though.)
Subhadeep Koley
Subhadeep Koley 2020 年 2 月 5 日
@ Walter Roberson I did not knew about this change. Thanks for letting me know :)
Walter Roberson
Walter Roberson 2020 年 2 月 5 日
In order to use non-identifiers, you need to use dynamic field name syntax, or else pass the variable name as the second index
T.('Right Palm Media')
Or
T{:, 'Right Palm Media'}
But it is supported for R2019b onwards.

サインインしてコメントする。

Daniel M
Daniel M 2020 年 4 月 24 日

0 投票

The issue is that you likely added the entire Fieldtrip toolbox to your path, which is not recommended. I am currently using Fieldtrip for some analysis, and it does not override the istable function in its default behaviour.
Fieldtrip does not recommend adding the whole toolbox to your path. Just run the function ft_defaults.m and it will do it properly for you.
Try it by doing:
if isempty(which('ft_preprocessing'))
restoredefaultpath
startup;
ft_dir = path/to/main/fieldtrip/folder;
run(fullfile(ft_dir,'ft_defaults.m'));
end
The purpose of the if statement is so that you don't need to alter your path everytime you run your script, since this is a time-expensive process.
See also:

カテゴリ

ヘルプ センター および File ExchangeData Import and Analysis についてさらに検索

質問済み:

2020 年 2 月 4 日

回答済み:

2020 年 4 月 24 日

Community Treasure Hunt

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

Start Hunting!

Translated by