假设我们在data.table
中有一个列表列:
> dt = data.table( x = list( as.list( 1:4 ) ) )
> dt
x
1: <list>
当我通过x
访问dt
内j
的第一个索引时,x
会自动强制转换为data.table
。
> dt[, x[[1]] ]
V1 V2 V3 V4
1: 1 2 3 4
> dt
x
1: <data.table>
仅在访问和打印时才会出现此行为。访问或打印的替代表达方式不会导致强制:
> #Accessing only
> dt[, {z = x[[1]];NULL} ]
NULL
> dt
x
1: <list>
> #Accessing and printing
> dt[, {z = x[[1]];print(z);NULL} ]
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
[[4]]
[1] 4
NULL
> dt
x
1: <list>
此外,当我在x
环境之外访问dt
时,我无法在x
内获得dt
的强制。
> dt[ , x ][[1]]
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
[[4]]
[1] 4
> dt
x
1: <list>
我只是想知道是否有办法阻止这种自动强制?我还有其他data.table
个列表列,其中一些行可以转换为data.table
,而其他行的元素数量不规则,只能是list
。