2015-01-20 56 views
0

好的,所以我是R新手,但迄今爲止我已經取得了一些相當不錯的成功 - 我正在兩個數據幀的相應行之間運行統計測試(當然,一個只是一串值,因爲它只有一列)。我希望使用以下For循環:R:結果向量沒有出現在For循環中

zvalues = NULL 
zvalues = numeric(0) 
for(i in seq(nrow(geneexpx))){ 
    zvalues[i] <- try(unname((geneexpx[i]-rowMeans(geneexpy[i,]))/rowSds(geneexpy[i,]))) 
} 

問題是,生成的zvalues數值爲空。我不知道爲什麼。我可以爲單行運行相同的功能,並且工作正常。例如:

s = unname(geneexpx[4]-rowMeans(geneexpy[4,]))/rowSds(geneexpy[4,]) 
s 
[1] -2.431277e+156 

請讓我知道,如果你有什麼想法可能是什麼問題。

編輯:
頭geneexpx的:

c(1.501400411, -0.818584726, -0.455614921, -0.138022494, -1.213938495, -0.536465133) 

geneexpy是非常大的,但是每列是類似於上面geneexpx。

+0

你或許可以向量化這整個操作。請將'dput(head(geneexpx))'添加到帖子中,並顯示所需的結果 – 2015-01-20 21:03:04

+0

@RichardScriven我希望所添加的信息有所幫助。至於期望的結果,它只是一個向量,其中觀察數(行)與原始計算中使用的行相匹配。我希望爲普通英語中的每一行計算的基本計算是:(Geneexpx(row1) - Averagevalue(Geneexpy(row1)))/ Standarddeviation(geneexpy(row1)) – 2015-01-20 21:18:59

回答

0

你有幾件事情在這裏發生。首先,您需要將zvalues定義爲一個向量。其次,rowMeansrowSds是對矩陣的操作,而不是向量。通過選擇greneecxpy[i, ]您正在選擇矩陣的第i行,這將是一個向量。

您沒有提供geneexpy所以我做了一個了:

zvalues = rep(NA, length(geneexpx)) 
geneexpy <- matrix(runif(60), nrow = 6) 
for(i in seq_along(geneexpx)){ 
    zvalues[i] <- (geneexpx[i] - mean(geneexpy[i,]))/sd(geneexpy[i,]) 
} 

> zvalues 
[1] 3.772994 -4.283168 -2.812811 -2.074548 -5.649359 -4.323920