各种功能对 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(已发布)中的问题。
我注意到各种函数对 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(已发布)中的问题。