web-dev-qa-db-ja.com

R data.table:tibbleからdata.tableに移動してtibbleに戻る方法は?

私は主にtibble fromat from tidyverseのテーブルを使用しますが、一部の手順ではdata.tableパッケージを使用します。 data.tabletibbleに戻す最良の方法を知りたいですか?

data.tableには、data.frameからdata.tableに変換する巧妙な関数 setDT および setDF 関数があることを理解しています。 =(およびその逆)参照による、つまりコピーを作成しない。

しかし、元に戻したい場合はどうなりますかtibbledata.framesetDT()の結果としてas_tibbleを使用してデータをコピーしていますか?これを使用する賢い方法はありますか?おそらくdata.tablesetattr()を使用しますか?

library(data.table)
library(tidyverse)

iris_tib <- as_tibble(iris)

## some data.table operation
setDT(iris_tib)
setkey(iris_tib, Species)
iris_tib[, Sepal.Length.Mean := mean(Sepal.Length), by = Species]



## How to convert back to tibble efficiently?
setDF(iris_tib)
iris_tib_back <-  as_tibble(iris_tib)

## it looks like we were able to update by reference? Only rownames were (shallow) copied?
changes(iris_tib, iris_tib_back)
6
Matifou

@Frankが述べたように、これは投稿で議論されました ここ 。 1つの可能性は、属性を設定するsetattr()関数を使用することです参照による。正確に:

setattr(x, "class", c("tbl", "tbl_df", "data.frame"))

そして、元のクラスに疑問がある場合:

old_class <- class(iris_tib)
setDT(iris_tib)
.... # bunch of data.table operatios
setDF(iris_tib)
setattr(iris_tib, "class", old_class)

これらしい必要な仕事をティブルに戻すために。

1
Matifou