2015-12-21 55 views
5
set.seed(123) 
B = matrix( c(5, 3, 3, 1, 5, 1,3,1,NA,NA), nrow=5, ncol=2) 
m1<-matrix(nrow=5,ncol=2,data=runif(10)) 
m2<-matrix(nrow=5,ncol=2,data=runif(10)) 
m2[1,2]=NA; ml <- list(m1, m2) 
ind <- sapply(unique(c(B)), function(x) which(B == x, arr.ind = TRUE)) 
re <- lapply(ind, function(x) lapply(ml, function(y) y[x])) 
res=lapply(re, function(x) c(t(do.call(cbind, x)))) 

但我不知道哪個對應哪個。例如:res[[1]]代表5, 3, or 1 in B?有沒有一種方法來命名B的函數類(編號)t中的輸出命令?如何忽略lapply中的NA?

+0

你能在話你想要做什麼解釋?基於此輸入的理想預期輸出是什麼樣子? – Heroka

+0

我的下跪反應是說使用na.rm = TRUE ......但我並不確定你的目標。 – user1945827

+0

你可以在最後一行代碼中使用'na.omit',如果目標是去除NA值 – akrun

回答

5

我們可以使用complete.cases

lapply(re, function(x) { 
     v1 <- c(t(do.call(cbind, x))) 
     v1[complete.cases(v1)]}) 
+1

@bicton如果你使用了'unique(c(B)) [1] 5 3 1 NA',它通常遵循與那麼,在這種情況下,'5'將會是'res [[1]]','3'作爲res [[2]],等等...... – akrun

+1

@bicton您可以設置那麼'res'的名字就是'res < - setNames(res,unique(c(B)))' – akrun

+1

@bicton在設置好名字後,可以循環訪問'res'的名字,例如'lapply(names(res) ,函數(nm)write.table(res [[nm]],paste0('myfile',nm,'.txt')))(對不起,以前沒有看到這個消息) – akrun