readr(或其他来自tidyverse的包)使用data.frame而不是tibble

是否可以指定readr包中的read_csv应该返回data.frame而不是tibble?我可能忽略了它,但在包装手册中找不到这样的选项。readr(或其他来自tidyverse的包)使用data.frame而不是tibble

我的问题是,我的一些代码从pre-tibble时间不再运行,因为列的命名是关闭的。我可以tibbles转换成数据帧,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或一个数据框。

此问题也适用于其他来自全局的包(例如,dplyr)。

回答:

您可以使用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

以上是 readr(或其他来自tidyverse的包)使用data.frame而不是tibble 的全部内容, 来源链接: utcz.com/qa/267382.html

回到顶部