почему innerjoin не работает в parfor - PullRequest
0 голосов
/ 06 мая 2018

При написании кодов с parfor в Matlab. У меня ошибка из-за использования innerjoin, как показано ниже. Я обнаружил, что есть ошибка прозрачности из-за

N_boot = 5;
coeff_out2 = zeros(N_boot,N_coef);
sampled_id01 = zeros(Ndecisions,1);
sampled_id2 = table(sampled_id01, 'VariableNames', {'decision_id00'});
resample_dta = [];
parfor i = 1:N_boot
dta2 = dta;
dta2.Properties.VariableNames{1} = 'decision_id00';
decisions2 = unique(dta2.decision_id00);
Ndecisions2 = size(decisions2,1);
sampled_id01 = randsample(decisions2,Ndecisions2,true);
sampled_id2 = table(sampled_id01, 'VariableNames', {'decision_id00'});
resample_dta = innerjoin(sampled_id2,dta2,'Keys','decision_id00');
resample_dta = table2array(resample_dta);
result1 = mean(resample_dta(:,1:4));
coeff_out2(i,:) = result1;
end

Этот код повторяет

Error using tabular/innerjoin (line 96)
Transparency violation error.

Я не знаю, почему использование innerjoin, как указано выше, приводит к ошибке прозрачности. Когда я использую его только для цикла, проблем не возникает.

1 Ответ

0 голосов
/ 08 мая 2018

К сожалению, innerjoin использует функцию inputname, которая вызывает ошибку «нарушение прозрачности». Есть простой обходной путь, который заключает в себе вызов innerjoin, например:

innerjoinFcn = @(varargin) innerjoin(varargin{:});
parfor ...
    ...
    resample_dta = innerjoinFcn(sampled_id2,dta2,'Keys','decision_id00');
end
...