frequently used function for table variable
    3 views (last 30 days)
  
       Show older comments
    
I have a table with many temperature variables in C and I wanted to convert it into F using fuction. So I created following but it does not seems to work. Any way to create a function which are kind of common conversion which can be used again and again.
function   Table_CtoF(T,OldVariable,NewVariable)
    T.(NewVariable) = (T.(OldVariable)*9/5)+32;
end
0 Comments
Accepted Answer
  Star Strider
      
      
 on 7 Jun 2021
        I am not certain what ‘T’ looks like.  
Something like this would work — 
T = table(randi([-40 40],5,1),'VariableNames',{'OldVariable'})
T.NewVariable = Table_CtoF(T)
function  NewVariable = Table_CtoF(T)
    NewVariable = (T.('OldVariable')*9/5)+32;
end
The single quotes are important when using this sort of variable addressing.  
10 Comments
  dpb
      
      
 on 8 Jun 2021
				   T.New = (T.(Old)*9/5)+32; 
should be
   T.(New) = (T.(Old)*9/5)+32;
 You created the variable "New", not the one of the string value in variable New
More Answers (1)
  dpb
      
      
 on 7 Jun 2021
        Don't pass a table to your function, have it accept numeric inputs and return same; then just call it with the table names.  Much more generic/useful that way.
>> which -all C2F
C:\Users\Duane\Documents\MATLAB\Utilities\C2F.m
>> type C2F
function F=C2F(C)
  % convert degree C to F
  F=1.8*C+32;
end
>> 
Usage in your case would be something like
T.F=C2F(T.C);
if your table is T and the centigrade temperature variable is "C"
I'd be more tempted to use something like
T.C=C2F(T.C);                                       % store temperature F in original variable
ixC=find(matches(T.Properties.VariableNames,'C'));  % find which variable index it is    
T.Properties.VariableNames(ixC)='F';                % label it as 'F' instead
so as to not carry but the one temperature variable.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!