各种功能对 tbl_df 反应不佳(dplyr 使用的数据帧类型)

various functions react badly to tbl_df (data frame type used by dplyr)

我注意到各种函数对 dplyr 使用的 class tbl_df 反应不佳。我不知道如何预测什么时候会出现问题,什么时候不会。转换为原生 R 数据框总能解决问题,但这很烦人。有没有比根据需要转换为原生 R 数据帧更好的方法?

我最近的例子是使用 xtable 包:

> library(dplyr)
> library(nycflights13)
> library(xtable)

tbl_df 由 dplyr 使用:

> flights
Source: local data frame [336,776 x 16]

   year month day dep_time dep_delay arr_time arr_delay carrier tailnum flight origin dest air_time distance hour minute
1  2013     1   1      517         2      830        11      UA  N14228   1545    EWR  IAH      227     1400    5     17
2  2013     1   1      533         4      850        20      UA  N24211   1714    LGA  IAH      227     1416    5     33
3  2013     1   1      542         2      923        33      AA  N619AA   1141    JFK  MIA      160     1089    5     42
4  2013     1   1      544        -1     1004       -18      B6  N804JB    725    JFK  BQN      183     1576    5     44
5  2013     1   1      554        -6      812       -25      DL  N668DN    461    LGA  ATL      116      762    5     54
6  2013     1   1      554        -4      740        12      UA  N39463   1696    EWR  ORD      150      719    5     54
7  2013     1   1      555        -5      913        19      B6  N516JB    507    EWR  FLL      158     1065    5     55
8  2013     1   1      557        -3      709       -14      EV  N829AS   5708    LGA  IAD       53      229    5     57
9  2013     1   1      557        -3      838        -8      B6  N593JB     79    JFK  MCO      140      944    5     57
10 2013     1   1      558        -2      753         8      AA  N3ALAA    301    LGA  ORD      138      733    5     58
..  ...   ... ...      ...       ...      ...       ...     ...     ...    ...    ...  ...      ...      ...  ...    ...

xtable 失败:

> xtable(flights %>% head)
Error in .subset2(x, i, exact = exact) : subscript out of bounds

转换后xtable即可:

> xtable(flights %>% head %>% data.frame)
% latex table generated in R 3.1.1 by xtable 1.7-3 package
% Fri Jan 16 08:53:55 2015
\begin{table}[ht]
\centering
\begin{tabular}{rrrrrrrrllrllrrrr}
  \hline
 & year & month & day & dep\_time & dep\_delay & arr\_time & arr\_delay & carrier & tailnum & flight & origin & dest & air\_time & distance & hour & minute \ 
  \hline
1 & 2013 &   1 &   1 & 517 & 2.00 & 830 & 11.00 & UA & N14228 & 1545 & EWR & IAH & 227.00 & 1400.00 & 5.00 & 17.00 \ 
  2 & 2013 &   1 &   1 & 533 & 4.00 & 850 & 20.00 & UA & N24211 & 1714 & LGA & IAH & 227.00 & 1416.00 & 5.00 & 33.00 \ 
  3 & 2013 &   1 &   1 & 542 & 2.00 & 923 & 33.00 & AA & N619AA & 1141 & JFK & MIA & 160.00 & 1089.00 & 5.00 & 42.00 \ 
  4 & 2013 &   1 &   1 & 544 & -1.00 & 1004 & -18.00 & B6 & N804JB & 725 & JFK & BQN & 183.00 & 1576.00 & 5.00 & 44.00 \ 
  5 & 2013 &   1 &   1 & 554 & -6.00 & 812 & -25.00 & DL & N668DN & 461 & LGA & ATL & 116.00 & 762.00 & 5.00 & 54.00 \ 
  6 & 2013 &   1 &   1 & 554 & -4.00 & 740 & 12.00 & UA & N39463 & 1696 & EWR & ORD & 150.00 & 719.00 & 5.00 & 54.00 \ 
   \hline
\end{tabular}
\end{table}

我正在使用 dplyr 0.3.0.2。

这似乎不再是 dplyr 版本 0.4.1(已发布)中的问题。