R:创建(长)傻瓜列表时发出警告

时间:2015-04-13 21:11:34

标签: r data.table

如果c和0,则列x和给定值1的虚拟列等于c==x。通常,通过为列c创建虚拟对象,可以在选择时排除一个值x,因为最后一个虚拟列不会添加任何信息w.r.t.现有的虚拟列。

以下是我在firm中为data.table列创建一长串虚拟对象的方法:

values <- unique(myDataTable$firm)
cols <- paste('d',as.character(inds[-1]), sep='_') # gives us nice d_value names for columns
# the [-1]: I arbitrarily do not create a dummy for the first unique value
myDataTable[, (cols):=lapply(values[-1],function(x)firm==x)]

此代码可靠地用于以前的列,这些列具有较小的唯一值。 firm然而更大:

tr(values)
 num [1:3082] 51560090 51570615 51603870 51604677 51606085 ...

我在尝试添加列时收到警告:

Warning message:
  truelength (6198) is greater than 1000 items over-allocated (length = 36). See ?truelength. If you didn't set the datatable.alloccol option very large, please report this to datatable-help including the result of sessionInfo().

据我所知,我仍然需要所有列。我可以忽略这个问题吗?它会减慢未来的计算速度吗?我不知道该怎么做以及truelength的相关内容。

1 个答案:

答案 0 :(得分:3)

以Arun的评论作为答案 您应该使用alloc.col函数将data.table中所需的列数预先分配给大于预期ncol的数字。

alloc.col(myDataTable, 3200)

另外,根据您使用数据的方式,我建议您考虑将宽表重新整理为长表,请参阅EAV。然后,每个数据类型只需要一列。