Your line
is testing all of R and all of B and all of G at the same time. R>90&R>B&R>G is calculating a 2D array of logical results. Then "if" is asked to make a decision based upon the 2D array of results. The behavior is well-defined in MATLAB: MATLAB considers the condition to be true if and only if all of the values are non-zero . Which would require that the entire matrix consisted of healthy skin.
You probably wanted
if R(i,j) > 90 & R(i,j) > B(i,j) & R(i,j) > G(i,j)
However, your code can be replaced with
hs = zeros(m, n, class(colorSkin) );
nhs = zeros(m, n, class(colorSkin) );
R = colorSkin(:, :, 1);
G = colorSkin(:, :, 2);
B = colorSkin(:, :, 3);
ROI = R > 90 & R > B & R > G;
hs(ROI) = R(ROI);
nhs(~ROI) = R(~ROI);
It is not clear to me why you wanted to copy the red channel into hs and nhs: I suspect you overlooked that colorSkin(i, j) is a 2D reference to a 3D array.
Are you sure that you do not just want to create an ROI? An array of true and false values representing where the skin is healthy or not?
Or perhaps you want to transfer full color:
hs = colorSkin;
nhs = colorSkin;
R = colorSkin(:, :, 1);
G = colorSkin(:, :, 2);
B = colorSkin(:, :, 3);
ROI = R > 90 & R > B & R > G;
ROI3 = ROI(:,:,[1 1 1]);
hs(~ROI3) = 0;
nhs(ROI3) = 0;