R apply error-as.matrix.data.frame()中的错误

R apply error-as.matrix.data.frame()中的错误,r,apply,R,Apply,我遇到了一个令人困惑的错误。 我正在使用以下函数删除任何列中包含NA观测的数据帧的行 ##### removes NA'd rows from a dataFrame wipeNArows<-function(X){ rowsToDelete<-unique(unlist(apply(apply(X,2,is.na),2,which))) if (length(rowsToDelete)>0){ return (X[-rowsToDelete,]) }

我遇到了一个令人困惑的错误。 我正在使用以下函数删除任何列中包含NA观测的数据帧的行

##### removes NA'd rows from a dataFrame
wipeNArows<-function(X){
  rowsToDelete<-unique(unlist(apply(apply(X,2,is.na),2,which)))
  if (length(rowsToDelete)>0){
    return (X[-rowsToDelete,])
  }
  else{
    return (X)
  }
}

感谢您的回复,

对我来说很好,但为什么不使用
?完成。案例

testFrame[complete.cases(testFrame),]
    x  y  z
2  10  8 13
3  11 16 18
4  11  7  7
6   8  8 14
7   9 11 11
8  12 11  5
9  10  7  4
10  7 12  9
11 10 13 11
12  9 12 10
13 10  5  8
14 13  5  8
15 11  5  5
18 13 14  7
19  2 13  8

identical(testFrame[complete.cases(testFrame),], wipeNArows(testFrame))
[1] TRUE

对我来说很好,但是为什么不使用
?complete.cases

testFrame[complete.cases(testFrame),]
    x  y  z
2  10  8 13
3  11 16 18
4  11  7  7
6   8  8 14
7   9 11 11
8  12 11  5
9  10  7  4
10  7 12  9
11 10 13 11
12  9 12 10
13 10  5  8
14 13  5  8
15 11  5  5
18 13 14  7
19  2 13  8

identical(testFrame[complete.cases(testFrame),], wipeNArows(testFrame))
[1] TRUE

如果没有问题数据,我只能建议使用不同的函数

wipe_na_rows <- function(X){
  X[!apply(X, 1, function(x) any(is.na(x))),]
}

如果没有问题数据,我只能建议使用不同的函数

wipe_na_rows <- function(X){
  X[!apply(X, 1, function(x) any(is.na(x))),]
}
wipe_na_行hmm谢谢回复,
不知道complete.cases函数。但这又是一个错误

 Error in complete.cases(dFrame) : not all arguments have the same length
-->似乎在某种程度上解决了这个问题

有问题的数据框的问题在于它包含一个带有日期的POSIXlt对象列。显然,完整的案例和应用内部工作并不能很好地处理这个问题。解决方法是使用strftime转换为角色,然后使用strftime返回

谢谢,

嗯,谢谢你的回复, 不知道complete.cases函数。但这又是一个错误

 Error in complete.cases(dFrame) : not all arguments have the same length
-->似乎在某种程度上解决了这个问题

有问题的数据框的问题在于它包含一个带有日期的POSIXlt对象列。显然,完整的案例和应用内部工作并不能很好地处理这个问题。解决方法是使用strftime转换为角色,然后使用strftime返回


谢谢,

另一种解决问题的方法是
na。省略

na.omit(testFrame)

    x  y  z
2   7 11 11
3  12 10 10
4  13 10  9
6  11 10 12
7  13 14  8
8   7  9  7
9   8 11 12
10  5 10  7
11  5 15  9
12  7 13  9
15 15  8  9
16 13  7 15
17  5 10 12
18  9  8  6
20 18  7  6

另一种解决问题的方法是
na.omit

na.omit(testFrame)

    x  y  z
2   7 11 11
3  12 10 10
4  13 10  9
6  11 10 12
7  13 14  8
8   7  9  7
9   8 11 12
10  5 10  7
11  5 15  9
12  7 13  9
15 15  8  9
16 13  7 15
17  5 10 12
18  9  8  6
20 18  7  6

一般情况下,如果您的数据中没有na,那么正如Aditya Sihag所建议的,问题可能是您的数据之一。frame列的数据类型可能是对象列表,例如list或POSIXlt对象。您可以对其进行强制转换,也可以仅在柱上使用lappy。但是,在应用lapply之前,再次确保列数据类型不是list或POSIXlt,如果是,则仅强制转换它。

一般情况下,如果数据中没有na,那么正如Aditya Sihag所建议的,问题可能是数据之一。frame columns的数据类型可能是对象列表,例如list或POSIXlt对象。您可以对其进行强制转换,也可以仅在柱上使用lappy。但在应用lappy之前,再次确保列数据类型不是list或POSIXlt,如果是,则直接强制转换它。

能否提供一个示例,说明它不起作用,而不是起作用的示例?我建议在函数开头插入
browser()
。这样,您就可以逐步检查代码,检查每个元素并查找错误。您能否提供一个示例,说明它在哪里不起作用,而不是一个起作用的示例?我建议在函数的开头插入
browser()
。这样,你就可以一步一步地检查你的代码,检查每一个元素并找出错误。很好,这不需要重新转换。很好,这不需要重新转换