如何迭代字符串向量并在 matlab 中使用 switch case?

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

我是 matlab 的新手(几分钟前!)。我有一个字符串向量:

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

我正在使用 switch-case 结构如下:

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

但它给了我一个错误 SWITCH expression must be a scalar or string constant.

我也尝试过将 cellstr() 用于 training_method 并在 switch 构造中使用 [training_method] 但仍然没有成功。

更新:

我所要做的就是在 switch 语句中将 training_method 更改为 char(training_method) 并且它起作用了。不过,我仍然对 cellchar 数据类型感到困惑。

for 循环中的每个元素 training_method 都是单个元素的元胞数组。您只能将 switch 与实际字符数组或整数文字一起使用,因此您需要通过执行 training_method{1}char(training_method) 来解压缩单元格,如您在更新中所述。

因此,执行以下任一操作:

for training_method = methods

    switch training_method{1}

    ....

或:

for training_method = methods

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

    ....