2013-06-12 50 views
-1

的文件夾中運行的只有一個文件這個腳本時:爲什麼lapply會在這個腳本中產生隨機的NA值?

emboss<-read.table("emboss_012.ss",header=T) 
x<-table(emboss[,2],emboss[,3])/NROW(emboss[,3]) 
y<-as.vector(t(x)) 
nms <- expand.grid(colnames(x), rownames(x)) 
names(y) <- paste(nms[,2],nms[,1],sep="") 
write.table(t(y), file = "test3.csv",append=TRUE) 

我得到期望的結果

然而,在一個隨時隨地在任意NA的出現在文件夾結果中的所有文件這樣做。我做這個:

runForAll <- function(x) { 
    emboss <- read.table(x,header=T) 
    x <- table(emboss[,2],emboss[,3])/NROW(emboss[,3]) 
    y <- as.vector(t(x)) 
    nms <- expand.grid(colnames(x), rownames(x)) 
    names(y) <- paste(nms[,2],nms[,1],sep="") 
    return(t(y)) 
} 

my.files <- list.files(pattern = "emboss_\\d+\\.ss") 
outputs <- lapply(my.files, FUN = runForAll) 

library(plyr) 
one.header.output <- rbind.fill.matrix(outputs) 
write.table(one.header.output, file = "nontpsec.csv") 

和我的文件所在的位置:

https://drive.google.com/folderview?id=0B0iDswLYaZ0zWjQ4RjdnMEUzUW8&usp=sharing 

這是非常奇怪的,不能爲什麼它正在發生,尤其是當所有其他數據是正確的,甚至是當一次循環遍歷所有文件時。

+0

有趣的是,調用as.matrix(輸出)顯示了違規長度減少文件。即使當你眼球的每一個輸出它顯示沒有丟失的數據。 – brucezepplin

+1

根據我的經驗,當我嘗試構建一個最小的,自包含的示例時,我會取得最佳效果。 95%的案例(對我來說)這個問題變得明顯。考慮在將來發布這樣一個示例(請參閱http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 –

回答

2

您的數據表是不同的長度,例如,第一個有20行,最後一個只有19! 這是問題出在哪裏。

這裏有一個小測試:

tmp <- c("A", "C", "D", "E", "F", "G", "H", "I", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "V", "W", "Y") 

which(rownames(x) %in% tmp) 

在文件12的情況下和13中的第二行缺少(標籤B)。

看一看這個帖子:

Compare two data.frames to find the rows in data.frame 1 that are not present in data.frame 2

這可能會爲你工作:

Fastest way to add rows for missing values in a data.frame?

相關問題