r - dplyr "data_frame"函数无法进行回收并且 data.frame 有限制?

标签 r dataframe dplyr

加载包如下:

R version 3.1.1 (2014-07-10)
Platform: x86_64-apple-darwin10.8.0 (64-bit)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.9.3 dplyr_0.3       

loaded via a namespace (and not attached):
[1] assertthat_0.1 DBI_0.3.1      magrittr_1.0.1 parallel_3.1.1 plyr_1.8.1     Rcpp_0.11.2   
[7] reshape2_1.4   stringr_0.6.2  tools_3.1.1 

尝试在新的 dplyr_0.3 中试验有趣的“data_frame”功能。似乎 data_frame 在构建数据框时无法进行回收。这是故意的吗?

data_frame(x=letters[1:10], y=1:5, z=runif(10))  ## pay attention to "y" column
Error in data_frame_(lazyeval::lazy_dots(...)) : 
  arguments imply differing number of rows: 10, 5, 10

然而,基本的 data.frame 函数可以实现这一点......

data.frame(x=letters[1:10], y=1:5, z =runif(10))
   x y          z
1  a 1 0.54345855
2  b 2 0.98478537
3  c 3 0.51510861
4  d 4 0.03766893
5  e 5 0.32097472
6  f 1 0.77391366
7  g 2 0.61993720
8  h 3 0.87983035
9  i 4 0.63159025
10 j 5 0.53198094

如果预期数据帧的行数与“y”列中的元素数的倍数不是整数,则 data.frame 会给出错误:

data.frame(x = letters[1:10], y = 1:4, z = runif(10))  ## Note the change on "y"
Error in data.frame(x = letters[1:10], y = 1:4, z = runif(10)) : 
  arguments imply differing number of rows: 10, 4

似乎只有 data.table 可以尝试完成任务并给出警告消息:

data.table(x = letters[1:10], y = 1:4, z = runif(10))
    x y          z
 1: a 1 0.17149580
 2: b 2 0.56452774
 3: c 3 0.01237395
 4: d 4 0.47183540
 5: e 1 0.52561037
 6: f 2 0.27053798
 7: g 3 0.82603959
 8: h 4 0.73871563
 9: i 1 0.03931619
10: j 2 0.34125535
Warning message:
In data.table(x = letters[1:10], y = 1:4, z = runif(10)) :
  Item 2 is of size 4 but maximum size is 10 (recycled leaving remainder of 2 items)

为什么使用“data_frame”和“data.frame”会有如此不同的行为? 我正在使用 dplyr 和 data.table 包同时处理数据框和数据表。了解这种行为将有助于避免代价高昂的错误。谢谢。

最佳答案

问:“这是故意的吗?”。好吧,从 data_frame 的帮助文本来看:“仅回收长度为 1 的输入。”。所以是的,我认为这是故意的。

问:“为什么?”:可能是因为 data_frame 是“data.frame 的精简版本”(来自 ?data_frame)。

关于r - dplyr "data_frame"函数无法进行回收并且 data.frame 有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26082019/

相关文章:

r - 使用 ggplot 和 lubridate 创建季度访谈

python Pandas "cannot set a row with mismatched columns"错误

r - 使用 R 中的 hclust 为时间序列数据的每个观察值分配簇号

r - 将大型列表转换为 tibble,其中一列包含所有元素

python - 如何使用 eval 数据框方法在表达式中使用自定义函数?

在嵌套的 tibble 上使用 select 时保留嵌套变量

r - 在列表列中追加缺失的项目

r - R向量-向量与有序索引匹配

R Shiny : How to allow users to stop the process? 以及如何从后端停止应用程序?

r - R中的翻译(重新编码)错误