2015-12-21 101 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