-2

我的循环有问题。它只是删除了我的欲望列中一些具有 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),] 
}

这引发了一个 dim(x) 错误...我想将零数设置为 NULL

我在想如下的事情,但显然它不好......这只是想法......我真的不知道如何很好地使用apply函数

for( i in 1:105){as.null(0) m[[i]]<-!apply(m[[i]],1,is.null(m[[i]])) }

非常感谢您的有用帮助!

4

1 回答 1

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)

那应该行得通。

于 2012-10-02T08:07:22.423 回答