【发布时间】:2017-11-06 16:12:36
【问题描述】:
在使用出色的 mi 包时,我遇到了意外的行为(至少是我意想不到的),因为缺少数据插补和小问题。
让我们假设一个名为 B 的 tibble。有问题的命令是:-
A <- missing_data.frame(B)
产生的错误信息是:-
.guess_type(y, favour_ordered, favour_positive, threshold, variable_name) [[B 中第一个变量的名称]] 中的错误必须是向量
这个例子重现了这种行为。
# Make the test data frames and tibbles
Numbers <- sample(seq(1:200),40)
Numbers2 <- sample(seq(1:200),40)
Numbers3 <- sample(seq(1:200),40)
Letters <- sample(letters,40,replace=TRUE)
#Mixed numeric and character data
DF.test <- data.frame(Numbers,Letters)
str(DF.test) #Number, Factor
DF.test2 <- data.frame(Numbers,Letters,stringsAsFactors = FALSE)
str(DF.test2) #Number, Character
Tibble.test <- data_frame(Numbers,Letters)
str(Tibble.test) #Number, Character
# Run the tests
DF.mdf <- missing_data.frame(DF.test) # Fine
DF2.mdf <- missing_data.frame(DF.test2) # Fine
Tibble.mdf <- missing_data.frame(Tibble.test) # ERROR
Tibble.mdf <- missing_data.frame(data.frame(Tibble.test)) # Fine
#Purely numeric data
Tibble.test2 <- data_frame(Numbers,Numbers2,Numbers3)
str(Tibble.test2) # Number, Number, Number
# Run the tests
Tibble.mdf2 <- missing_data.frame(Tibble.test2) # ERROR
Tibble.mdf2 <- missing_data.frame(data.frame(Tibble.test2)) # Fine
似乎 mi 对象是 tibbles 中的某些东西,而不是数据帧中的对象。错误消息没有帮助。通过将 tibble 强制回数据框很容易解决,但我在文档中没有看到这个问题的提及。我完全不熟悉 mi 的内脏。
我是否遗漏了一些基本的东西,或者文档中的一些东西,或者这是真正出乎意料的行为?欢迎所有帮助、cmets 和解释。
【问题讨论】:
-
小标题并不总是与 data.frames 兼容。 hadley 出于各种原因决定从 data.frame 语法中彻底中断,部分原因是输出的某些一致性。由于这种不兼容性,因此存在许多关于 SO 的问题。一些包依赖于有一个 data.frame 作为输入。这很可能是其中一种情况。特别是,
dat[, 1]如果 dat 是 data.frame 则返回向量,但如果 dat 是 tibble 则返回 tibble。这似乎是导致此错误的原因,因为 `.guess_type` 似乎需要一个向量。 -
github.com/cran/mi/blob/master/R/missing_data.frame.R 看起来它使用
as.data.frame()显式转换矩阵和列表,但它没有任何小标题的方法。 -
非常感谢你们 - 一个很好的解释,它让我注意到 tibbles 和 datfarmes 之间的一些关键区别。
-
不要在问题标题中将问题标记为已解决,而是将解决方案发布为答案!不禁止回答自己的问题(甚至可以选择直接在Ask a Question 页面回答问题)
-
好建议 - 谢谢!
标签: r dataframe missing-data tibble