2015-09-26 63 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'。 –