1

是否可以指定read_csvreadr包中返回 data.frame 而不是 tibble?我可能忽略了它,但我在包装手册中找不到这样的选项。

我的问题是我的一些来自 pre-tibble 时代的代码不再运行,因为列的命名已关闭。我可以使用 将小标题转换为数据框as.data.frame,但是与我最初创建数据框时(输出注释掉)相比,列的命名仍然会有所不同:

df <- data.frame("((hello))" = 1)
df
#  X..hello..
# 1          1
tb <- tibble("((hello))" = 1)
tb
## A tibble: 1 × 1
#  `((hello))`
#       <dbl>
#1           1
as.data.frame(tb)
#  ((hello))
#1         1

我可以(并且将在未来的项目中)使用这个checkpoint包来使用我最初运行这些项目时的包版本。但是,现在我正在寻找一个选项,我可以在其中指定是获得小标题还是数据框。

这个问题也适用于 tidyverse 中的其他包(例如,dplyr)。

4

1 回答 1

3

您可以使用make.names()破解这种不一致:

dfconv <- function(x) {
     return(setNames(as.data.frame(x),
              make.names(names(x))))
}

library(tibble)
df <- data.frame("((hello))" = 1)
tb <- tibble("((hello))" = 1)
identical(dfconv(tb),df)  ## TRUE
于 2017-01-26T16:30:22.873 回答