exAres
exAres

Reputation: 4926

How to iterate over a vector of strings and use switch case in matlab?

I am new to matlab (few minutes old!). I have a vector of strings as:

methods = {'adaptiveMixtureDiscriminantAnalysis',
          'gamSpline',
          'genaralizedPartialLeastSquares'
          'penalizedMultinomialRegression',
          'quadraticDiscriminantAnalysis'}

I am using a switch-case construct as follows:

for training_method = methods

    switch training_method
        case 'adaptiveMixtureDiscriminantAnalysis' 
            evalR('signal_and_conf <- adaptiveMixtureDiscriminantAnalysis(train_predictors, train_labels, test_predictors)');
        case 'gamSpline'
            evalR('signal_and_conf <- gamSpline(train_predictors, train_labels, test_predictors)');
        case 'genaralizedPartialLeastSquares'
            evalR('signal_and_conf <- genaralizedPartialLeastSquares(train_predictors, train_labels, test_predictors)');
        case 'penalizedMultinomialRegression'
            evalR('signal_and_conf <- penalizedMultinomialRegression(train_predictors, train_labels, test_predictors)');
        case 'quadraticDiscriminantAnalysis'
            evalR('signal_and_conf <- quadraticDiscriminantAnalysis(train_predictors, train_labels, test_predictors)');
        case 'majorityVoting'
            evalR('signal_and_conf <- majorityVoting(train_predictors, train_labels, test_predictors)');
        otherwise
            disp('No such model is available!')
    end

end

But it gives me an error saying SWITCH expression must be a scalar or string constant.

I also tried using cellstr() for training_method and also using [training_method] in switch construct but still no luck.

Update:

All I had to do was changing training_method to char(training_method) in switch statement and it worked. I am still confused with cell and char datatypes though.

Upvotes: 0

Views: 396

Answers (1)

rayryeng
rayryeng

Reputation: 104484

Each element training_method in your for loop would be a cell array of a single element. You can only use switch with an actual character array or integer literals, so you need to unpack the cell by either doing training_method{1}, or char(training_method) as you have stated in your update.

As such, do either:

for training_method = methods

    switch training_method{1}

    ....

Or:

for training_method = methods

    switch char(training_method) %// Already done by you

    ....

Upvotes: 1

Related Questions