【问题标题】:Error reading tibbles into the mi package with missing_data.frame command使用 missing_data.frame 命令将 tibbles 读入 mi 包时出错
【发布时间】: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


【解决方案1】:

答案是这样的:-

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

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

感谢 Imo 和 David Klotz 的回答。

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 2018-10-15
    • 2016-06-14
    • 1970-01-01
    • 2016-01-02
    • 2019-01-12
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多