2015-09-26 80 views
0

环路我想编写代码,会发现在R各自列的中位数,以此为我更好地了解和while循环。但是,我不太确定它为什么不工作,可以使用一些帮助。实施并同时R中

对于我的for循环,这就是我现在已经

D=c(1:2000) 
myMatrix1<-matrix(data = D, nrow = 20, ncol = 100, byrow = TRUE, dimnames = NULL) 
for(j in 1:100) 
for(i in 1:20) 
m<-median(myMatrix[ ,j]) 

结果是m里喷出是1050,现在我理解其中,从的。

我不太清楚怎么写了一个循环的这一点,但这里是我认为它是:

C=c(1:2000) 
myMatrix1<-matrix(data=C, nrow=20, ncol=100, byrow=TRUE, dimnames=NULL) 
m<-rep(0,100) 
while (j <= 100) 
m[j]<-median(myMatrix1[ , j]) 

我不知道为什么,但它一直返回C = C(1: 2000)出于某种原因。谁可以给我解释一下这个?

+0

for循环一般不会在R.答案窥视申请家庭。 – Heroka

+0

您的预期产量是多少?一个中位数矢量,其中每个元素是每行的中位数? – erasmortg

+0

@erasmortg很好的问题。我假设每个列的中位数都是在'median(myMatrix1 [,j])'中给出'[,j]'' –

回答

1

1050仅仅是最后一列的中位数:

median(myMatrix1[,100]) 
# 1050 

for循环应该是:

D=c(1:2000) 
myMatrix1 <- matrix(data = D, nrow = 20, ncol = 100, byrow = TRUE, dimnames = NULL) 
m <- rep(0,100) 
for(j in 1:100) 
    m[j] <- median(myMatrix1[, j]) 

没有必要为for(i in 1:20)

FWIW,你也可以使用apply(我知道你的运动的点学习循环)。 apply要简单得多。

D=c(1:2000) 
myMatrix1 <- matrix(data = D, nrow = 20, ncol = 100, byrow = TRUE, dimnames = NULL) 
result <- apply(myMatrix1, 2, median) 

[编辑:既然你现在已经添加在while循环试图]你需要增加你的柜台。

C <- c(1:2000) 
myMatrix1 <- matrix(data=C, nrow=20, ncol=100, byrow=TRUE, dimnames=NULL) 
result2 <- rep(0,100) 
j <- 1 
while (j <= 100) { 
    result2[j]<-median(myMatrix1[ , j]) 
    j <- j + 1 
} 

我假设你试图得到一个包含每列中位数的向量。

检查所有的方法都是平等[编辑:使用identical()而不是求和两个向量的差异]

identical(m, result1) 
## TRUE 

identical(result1, result2) 
## TRUE 
+0

'使用'identical()'或'all.equal()'来测试相等性。 –

+0

而不是相同的命令,你可以改为使用class(m)== class(result1)? – cambelot

+0

我使用'identical()'来检查向量是否相等---所以你可以看到'for','while'和'apply'方法返回相同的答案。 'class()'返回对象的类,当然不能用于检查向量的相等性。换句话说'class(1)== class(2)'是'TRUE'。 –