complete.cases问题:参数的'type'(列表)无效

时间:2014-04-13 11:47:40

标签: r

我收到以下错误:

  

complete.cases(dt)出错:无效'输入'参数(列表)

在数据框上使用complete.cases之前从未收到此消息。

class(dt)的调用会返回data.frame,因此没问题。

dt相对较大 - 有90个变量的800,000个障碍物。

对其他数据帧的类似操作没有问题。

任何人都知道可能出现什么问题?

2 个答案:

答案 0 :(得分:5)

我也遇到了同样的问题。正如@hrbrmstr正确指出的那样,data.frame有列表对象。就我而言,这是一个列表的数据框架 我使用以下命令将列表的data.frame转换为实际数据帧:

DF <- data.frame(matrix(unlist(DF), nrow=nrow(DF)),stringsAsFactors=FALSE)

在此基础上使用complete.cases。

答案 1 :(得分:0)

我遇到了同样的问题,@ hrbrmstr对原始问题的评论提供了很大的帮助。通过代码发布答案,以便任何偶然发现此问题的人都可以从中受益。

有问题的数据集x具有一个或多个类型为list的变量,导致出现错误消息:

  

complete.cases(x)中的错误:参数的“类型”(列表)无效

通常,您将使用str()从数据框中快速预览变量类型。但是,在我的情况下,我的数据帧包含2,431个变量(长和宽数据帧),因此使用str()的使用受到限制。相反,我使用方便的sapply()代码来获取数据框中存在的所有类的表:

table(as.character(sapply(x, class)))
# output:
c("ordered", "factor")      character         list         logical          numeric 
             1                   69            1            2225              136 

请注意,我们的数据框中有一个list类型的变量。


解决方案

在下面的代码片段中,我们确定任何list类型的变量,并将其从x中删除。我们再次使用table()来验证我们的数据框现在不再包含任何列表变量了:

is_list <- sapply(x, is.list)
x <- x[, !is_list]
table(as.character(sapply(x, class)))

继续应用complete.cases()

x <- x[complete.cases(x), ]