我试着检查从一个r对象创建一个箭头数组是否会创建一个副本。我创建了一个数组,然后从那个数组创建了一个原子向量,但是内存地址似乎不一样......是不是我做错了什么?
> library(arrow)
> v = c(1L,2L,3L)
> a = arrow::Array$create(v)
>
> .Internal(inspect(v))
@0x00000248ddac1f38 13 INTSXP g0c2 [REF(5)] (len=3, tl=0) 1,2,3
> .Internal(inspect(v[1]))
@0x00000248d5bc3dd0 13 INTSXP g0c1 [] (len=1, tl=0) 1
>
> d = a$as_vector()
> .Internal(inspect(d))
@0x00000248da541230 13 INTSXP g0c0 [REF(65535)] arrow::ChunkedArray<0x00000248dac3e2b0, int32, 1 chunks, 0 nulls> len=3
> .Internal(inspect(d[1]))
@0x00000248d5bc3fc8 13 INTSXP g0c1 [] (len=1, tl=0) 1
1条答案
按热度按时间mccptt671#
我不太清楚你的目标是什么?如果你想看看从vector〉arrow转换是否会创建一个a副本,你有你的答案:是的,这就是内存地址不同的原因。
将R向量转换为箭头数组会通过libarrow C++库将其转换为箭头内存布局,该库位于R之外的内存中。您可以通过保存和加载箭头对象来确认这一点: