我想将R语言中的代码转换为MATLAB(不是在MATLAB中执行R代码)。R语言中的代码如下:
data_set <- read.csv("lab01_data_set.csv")# get x and y valuesx <- data_set$xy <- data_set$y# get number of classes and number of samplesK <- max(y)N <- length(y)# calculate sample meanssample_means <- sapply(X = 1:K, FUN = function(c) {mean(x[y == c])})# calculate sample deviationssample_deviations <- sapply(X = 1:K, FUN = function(c) {sqrt(mean((x[y == c] - sample_means[c])^2))})
为了在MATLAB中实现,我编写了以下代码:
%% Reading Data% read data into memoryX=readmatrix("lab01_data_set(ViaMatlab).csv");% get x and y valuesx_read=X(1,:);y_read=X(2,:);% get number of classes and number of samplesK = max(y_read);N = length(y_read);% Calculate sample mean - 1st method% funct1 = @(c) mean(c);% G1=findgroups(y_read);% sample_mean=splitapply(funct1,x_read,G1)% Calculate sample mean - 2nd methodfor m=1:3sample_mean(1,m)=mean(x(y_read == m));endsample_mean;% Calculate sample deviation - 2nd methodfor m=1:3sample_mean=mean(x(y_read == m));sample_deviation(1,m)=sqrt(mean((x(y_read == m)-sample_mean).^2));sample_mean1(1,m)=sample_mean;endsample_deviation;sample_mean1;
如您所见,我知道如何在MATLAB中使用for循环来替代R语言中的sapply
(如代码中的第二种方法),但不知道如何使用函数(可能是splitapply
或其他函数)。
PS: 不知道如何上传数据,对此部分表示歉意。
回答:
R语言中的sapply
在MATLAB中的对应函数是arrayfun
– 以及它的相关函数cellfun
、structfun
和varfun
,具体取决于您的输入数据类型。
例如,在R语言中:
> sapply(1:3, function(x) x^2)[1] 1 4 9
在MATLAB中等同于:
>>> arrayfun(@(x) x^2, 1:3)ans = 1 4 9
请注意,如果您传递给arrayfun
、cellfun
等函数的函数结果对每个输入没有相同类型或大小,则需要指定'UniformOutput', 'false'
。