我的循环问题。它只是删除了我的欲望栏中有0或NA值的一些行,我不知道为什么:
for (i in 1:105) {
for (j in 1:l[i+1]){
if(m[[i]][j,12]==0 | is.na(m[[i]][j,12])) {
m[[i]]=m[[i]][-j,]
}
}
}
在网上搜索我看到也许我可以使用应用功能...类似于:
for( i in 1:105){m[[i]]<-m[[i]][!apply(is.na(m[[i]]), 1, any),]}
for( i in 1:105){
as.null(0)
m[[i]]<-m[[i]][!apply(is.null(m[[i]]), 1, any),]
}
这会引发一个暗淡的(x)错误...我想将零号设置为NULL
我正在考虑如下事情,但显然它并不好......它只是想法......我真的不知道如何使用应用功能
for( i in 1:105){as.null(0) m[[i]]<-!apply(m[[i]],1,is.null(m[[i]])) }
非常感谢您的有用帮助!
答案 0 :(得分:1)
使用apply
在数组的边缘上应用函数,但我认为这不是最好的想法,因为您只需要正确地对矩阵进行子集化。让我们只关注一个矩阵m
。
ind = m[,12] == 0 | is.na(m[,12])
ind
将TRUE
适当且您可以
m = m[!ind, ] # m is a matrix, not the list
删除行。你可以将它放在循环中,或者使用lapply
(在列表中应用函数),但首先你需要一个函数应用于列表中的每个元素(所有105矩阵),所以
removeRows = function(m) {
ind = m[,12] == 0 | is.na(m[,12])
m = m[!ind, ]
return(m)
}
m = lapply(m, FUN=removeRows)
这应该有效。