2017-01-26 1250 views
1

是否可以指定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)。

回答

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 
相關問題