是否可以指定read_csv
包中的readr
应该返回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
包来使用我最初运行这些项目时的软件包版本。但是,现在我正在寻找一个选项,我可以指定是获得tibble还是数据帧。
此问题也适用于tidyverse的其他包(例如dplyr
)。
答案 0 :(得分: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