njhui 求教 若有一个高维矩阵,如5维(a_{ijklu})_{I*J*K*L*U},其中。 实现如下目的: 不使用循环语句 将其中所有 k=1 元素替换为相应的均值 \frac{1}{I*J*L*U}\sum_{i,j,l,u}a_{i,j,k=1,l,u}; 替换所有k=2的元素为相应的均值 \frac{1}{I*J*L*U}\sum_{i,j,l,u}a_{i,j,k=2,l,u}; ..... ...... 替换所有k=K的元素为相应的均值 \frac{1}{I*J*L*U}\sum_{i,j,l,u}a_{i,j,k=K,l,u}。 更一般的,如何替换所有两个下标相同的元素为相应的均值。
yanlinlin82 没有完全看明白,不知道楼主说的是不是这个意思: a[,,1,,] <- mean(a[,,1,,]) a[,,2,,] <- mean(a[,,2,,]) ... ... a[,,K,,] <- mean(a[,,K,,]) 不过让这K个语句一次执行,我还只能想到用循环: for (k in 1:dim(a)[3]) a[,,k,,] <- mean(a[,,k,,]) 楼主为什么一定要求不用循环呢?
潘岚锋 a[,,1:k,,]=apply(a,c(1,2,4,5),mean) 例子 <br /> z <- array(1:24, dim=2:4)<br /> z[,,1:4]=apply(z,c(1,2),mean)<br />
njhui 楼上两位的建议都有效,不过由于程序的特色性,采用abel的建议,使用sweep函数。不过没弄清楚 如何设置 sweep(x, MARGIN, STATS, FUN="-", check.margin=TRUE, ...) 中参数FUN,直接达到替换的目的。 我是采用比较笨的方法,另外定义一个0矩阵A0,然后 sweep(A0,, ...,FUN=“+”,....)。