【发布时间】:2020-11-19 19:02:24
【问题描述】:
警告信息: 在 as.data.table.list(x, keep.rownames = keep.rownames, check.names = check.names, : 项目 2 有 1650197 行,但最长的项目有 1667524;与剩余物一起回收。
【问题讨论】:
标签: r dplyr data.table
警告信息: 在 as.data.table.list(x, keep.rownames = keep.rownames, check.names = check.names, : 项目 2 有 1650197 行,但最长的项目有 1667524;与剩余物一起回收。
【问题讨论】:
标签: r dplyr data.table
当为 R 提供某种形式的列表输入以产生某种形式的列表输出但输入长度和输出长度不匹配时,会出现此警告。在这些情况下,R 会根据需要重复和重用较短的列表。
请参阅文档here:“如果提供了列表,则每个元素都将转换为 data.table 中的一列,并自动回收较短的元素。”
但是,如果较长的列表不是较短列表长度的倍数,那么长度列表的差异不太可能是故意的,因此会出现此警告。
一些例子:
> library(data.table)
> example1 = list(x = c(1,2,3,4,5,6), y = 3)
> as.data.table(example1)
x y
1: 1 3
2: 2 3
3: 3 3
4: 4 3
5: 5 3
6: 6 3
> example2 = list(x = c(1,2,3,4,5,6), y = c('a','b'))
> as.data.table(example2)
x y
1: 1 a
2: 2 b
3: 3 a
4: 4 b
5: 5 a
6: 6 b
在这两个示例中,x 和 y 列表的长度不同,因此重复了 y 列表。这不会产生警告,因为y 的长度为 1 或 2,它是长度为 6 的 x 的倍数。
> example3 = list(x = c(1,2,3,4,5,6), y = c('a','b','c','d'))
> as.data.table(example3)
x y
1: 1 a
2: 2 b
3: 3 c
4: 4 d
5: 5 a
6: 6 b
Warning message:
In as.data.table.list(example3) :
Item 2 has 4 rows but longest item has 6; recycled with remainder.
但是这个例子x的长度是6,y的长度是4。所以在创建数据表的时候只重复了y的前两项。 R 会发出警告,因为 y 中的每个术语都没有被重复使用相同的次数。
在您的示例中,长度不是 6 和 4,而是长度为 1650197 和 1667524 的列。因为您不太可能(但可能)想要重复较短列 R 的前 17327 个条目(1667524 - 1650197)给你一个警告,提示你检查你的输入列。
【讨论】: