0

在使用出色的mi包时,我遇到了意外的行为(至少,我没有预料到),因为缺少数据插补和 tibbles。

让我们假设一个名为 B 的小标题。有问题的命令是:-

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的内脏完全不熟悉。

我是否遗漏了一些基本的东西,或者文档中的一些东西,或者这真的是出乎意料的行为?欢迎所有帮助、评论和解释。

4

1 回答 1

0

答案是这样的:-

Tibbles 和数据帧的行为几乎相同,但并不完全相同。已更改的 datframe 行为的一部分是列子集运算符。

如果 D 是 data.frame,则D[, 1] 返回一个向量,但如果 D 是一个 tibble,则返回一个tibble。mi 包想要一个向量,所以抱怨。

感谢 Imo 和 David Klotz 的回答。

于 2017-11-08T20:51:56.590 回答