我收到以下错误:
complete.cases(dt)出错:无效'输入'参数(列表)
在数据框上使用complete.cases
之前从未收到此消息。
对class(dt)
的调用会返回data.frame
,因此没问题。
dt
相对较大 - 有90个变量的800,000个障碍物。
对其他数据帧的类似操作没有问题。
任何人都知道可能出现什么问题?
答案 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), ]