Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rbindlist和嵌套data.table,使用/不使用get时的不同行为_R_Data.table - Fatal编程技术网

rbindlist和嵌套data.table,使用/不使用get时的不同行为

rbindlist和嵌套data.table,使用/不使用get时的不同行为,r,data.table,R,Data.table,我正在使用jsonlite加载一些JSON数据,这导致一些嵌套数据(在结构上)与下面构造的toy数据类似。我希望能够使用rbindlist将嵌套的数据表绑定在一起 设置: > dt <- data.table(a=c("abc", "def", "ghi"), b=runif(3)) > dt[, c:=list(list(data.table(d=runif(4), e=runif(4))))] > dt a b c 1:

我正在使用
jsonlite
加载一些JSON数据,这导致一些嵌套数据(在结构上)与下面构造的toy
数据类似。我希望能够使用
rbindlist
将嵌套的
数据表绑定在一起

设置:

> dt <- data.table(a=c("abc", "def", "ghi"), b=runif(3))
> dt[, c:=list(list(data.table(d=runif(4), e=runif(4))))]
> dt
     a         b            c
1: abc 0.2623218 <data.table>
2: def 0.7092507 <data.table>
3: ghi 0.2795103 <data.table>
这正是我所期望/想要的。此外,原始的
dt
保持不变:

> dt
     a         b            c
1: abc 0.2623218 <data.table>
2: def 0.7092507 <data.table>
3: ghi 0.2795103 <data.table>
现在,列名已丢失,并替换为默认的“V1”和“V2”值。有没有办法保留这些名字

在开发版本(v1.9.5)中,问题比简单地丢失名称更严重。执行以下语句后:
rbindlist(dt[,get(“c”)])
整个
数据。表变得损坏:

> dt
Error in FUN(X[[3L]], ...) : 
  Invalid column: it has dimensions. Can't format it. If it's the result of data.table(table()), use as.data.table(table()) instead.
需要说明的是,在v1.9.4(从CRAN安装)和v1.9.5(从github安装)中都出现了名称丢失问题,但数据损坏。
表问题似乎只影响v1.9.5(截至今天-2015年7月8日)

如果我能坚持NSE版本,一切都会顺利进行。我的问题是,坚持使用NSE版本需要编写多个NSE函数来互相调用,这似乎很快就会变得一团糟


是否有任何(非NSE)已知的解决方法?另外,这是一个已知的问题吗?

自从问到这个问题以来,这必须在过去5年内得到解决。现在我得到了预期的结果

> library(data.table)
data.table 1.13.3 IN DEVELOPMENT built 2020-11-17 18:11:47 UTC; jan using 4 threads (see ?getDTthreads).  Latest news: r-datatable.com
> dt <- data.table(a=c("abc", "def", "ghi"), b=runif(3))
> dt[, c:=list(list(data.table(d=runif(4), e=runif(4))))]
> dt
     a         b                 c
1: abc 0.2416624 <data.table[4x2]>
2: def 0.0222938 <data.table[4x2]>
3: ghi 0.3510681 <data.table[4x2]>
> rbindlist(dt[, c])
            d          e
 1: 0.5485731 0.32366420
 2: 0.5457945 0.45173251
 3: 0.6796699 0.03783026
 4: 0.4442776 0.03121024
 5: 0.5485731 0.32366420
 6: 0.5457945 0.45173251
 7: 0.6796699 0.03783026
 8: 0.4442776 0.03121024
 9: 0.5485731 0.32366420
10: 0.5457945 0.45173251
11: 0.6796699 0.03783026
12: 0.4442776 0.03121024
> rbindlist(dt[, get("c")])
            d          e
 1: 0.5485731 0.32366420
 2: 0.5457945 0.45173251
 3: 0.6796699 0.03783026
 4: 0.4442776 0.03121024
 5: 0.5485731 0.32366420
 6: 0.5457945 0.45173251
 7: 0.6796699 0.03783026
 8: 0.4442776 0.03121024
 9: 0.5485731 0.32366420
10: 0.5457945 0.45173251
11: 0.6796699 0.03783026
12: 0.4442776 0.03121024
> dt
     a         b                 c
1: abc 0.2416624 <data.table[4x2]>
2: def 0.0222938 <data.table[4x2]>
3: ghi 0.3510681 <data.table[4x2]>
>库(data.table)
表1.13.3 2020-11-17 18:11:47 UTC在建开发中的数据;jan使用4个线程(请参阅getDTthreads)。最新消息:r-datatable.com
>dt dt[,c:=list(list(data.table)(d=runif(4),e=runif(4)))]
>dt
a、b、c
1:abc 0.2416624
2:def 0.0222938
3:ghi 0.3510681
>rbindlist(dt[,c])
d e
1: 0.5485731 0.32366420
2: 0.5457945 0.45173251
3: 0.6796699 0.03783026
4: 0.4442776 0.03121024
5: 0.5485731 0.32366420
6: 0.5457945 0.45173251
7: 0.6796699 0.03783026
8: 0.4442776 0.03121024
9: 0.5485731 0.32366420
10: 0.5457945 0.45173251
11: 0.6796699 0.03783026
12: 0.4442776 0.03121024
>rbindlist(dt[,get(“c”)]))
d e
1: 0.5485731 0.32366420
2: 0.5457945 0.45173251
3: 0.6796699 0.03783026
4: 0.4442776 0.03121024
5: 0.5485731 0.32366420
6: 0.5457945 0.45173251
7: 0.6796699 0.03783026
8: 0.4442776 0.03121024
9: 0.5485731 0.32366420
10: 0.5457945 0.45173251
11: 0.6796699 0.03783026
12: 0.4442776 0.03121024
>dt
a、b、c
1:abc 0.2416624
2:def 0.0222938
3:ghi 0.3510681

rbindlist(dt$“c”)怎么样?
?或者更一般地说,
var提交的问题将看到@Arun所说的内容。无论哪种方式,如果您不运行
get
rbindlist(dt[[var]])
也应该在devel版本上工作,而无论v<1.9.5上的
get
,它都可以正常工作。(正如@Frank所提到的)谢谢David。这又让我抓狂了。
> dt
Error in FUN(X[[3L]], ...) : 
  Invalid column: it has dimensions. Can't format it. If it's the result of data.table(table()), use as.data.table(table()) instead.
> library(data.table)
data.table 1.13.3 IN DEVELOPMENT built 2020-11-17 18:11:47 UTC; jan using 4 threads (see ?getDTthreads).  Latest news: r-datatable.com
> dt <- data.table(a=c("abc", "def", "ghi"), b=runif(3))
> dt[, c:=list(list(data.table(d=runif(4), e=runif(4))))]
> dt
     a         b                 c
1: abc 0.2416624 <data.table[4x2]>
2: def 0.0222938 <data.table[4x2]>
3: ghi 0.3510681 <data.table[4x2]>
> rbindlist(dt[, c])
            d          e
 1: 0.5485731 0.32366420
 2: 0.5457945 0.45173251
 3: 0.6796699 0.03783026
 4: 0.4442776 0.03121024
 5: 0.5485731 0.32366420
 6: 0.5457945 0.45173251
 7: 0.6796699 0.03783026
 8: 0.4442776 0.03121024
 9: 0.5485731 0.32366420
10: 0.5457945 0.45173251
11: 0.6796699 0.03783026
12: 0.4442776 0.03121024
> rbindlist(dt[, get("c")])
            d          e
 1: 0.5485731 0.32366420
 2: 0.5457945 0.45173251
 3: 0.6796699 0.03783026
 4: 0.4442776 0.03121024
 5: 0.5485731 0.32366420
 6: 0.5457945 0.45173251
 7: 0.6796699 0.03783026
 8: 0.4442776 0.03121024
 9: 0.5485731 0.32366420
10: 0.5457945 0.45173251
11: 0.6796699 0.03783026
12: 0.4442776 0.03121024
> dt
     a         b                 c
1: abc 0.2416624 <data.table[4x2]>
2: def 0.0222938 <data.table[4x2]>
3: ghi 0.3510681 <data.table[4x2]>