【发布时间】:2013-08-30 18:35:29
【问题描述】:
考虑一下
do.call(rbind, list(data.table(x=1, b='x'),data.table(x=1, b=NA)))
返回
x b
1: 1 x
2: 1 NA
但是
do.call(rbind, list(data.table(x=1, b=NA),data.table(x=1, b='x')))
返回
x b
1: 1 NA
2: 1 NA
如何在不重新排序列表内容的情况下强制执行第一个行为?
数据表在 mapreduce 作业中确实更快(在 55 个节点上调用 data.table ~10*3MM 次,数据表比数据帧快很多倍,所以我希望它能够工作......) 问候 萨塔什
【问题讨论】:
-
我猜这是因为
NA是合乎逻辑的而as.logical('x')=NA,所以当rbind决定该列是合乎逻辑的(基于它的第一个参数)时,它会强制后续项目匹配.do.call(rbind, list(data.table(x=1, b=as(NA,'character')),data.table(x=1, b='x')))工作... -
顺便说一下,data.tables 有一个“优化的
do.call(rbind,...)”,叫做rbindlist。这个网站上有一些关于它的问题,例如,stackoverflow.com/questions/15673550/… -
@Frank -- 非常有帮助的 cmets。我在答案中添加了对
rbindlist的引用。
标签: r data.table rbind do.call