[解決済み] データフレームをコピーせずにdata.tableに変換する
2023-07-06 15:40:25
質問
大きなデータフレーム(数GB程度)があり、これを
data.table
. 使用方法
as.data.table
を使うとデータフレームのコピーが作成されます。つまり、利用可能なメモリがデータの少なくとも2倍のサイズである必要があります。コピーなしで変換を行う方法はありますか?
簡単な例で説明します。
library(data.table)
N <- 1e6
K <- 1e2
data <- as.data.frame(rep(data.frame(rnorm(N)), K))
gc(reset=TRUE)
tracemem(data)
data <- as.data.table(data)
gc()
出力あり。
library(data.table)
# data.table 1.8.10 For help type: help("data.table")
N <- 1e6
K <- 1e2
data <- as.data.frame(rep(data.frame(rnorm(N)), K))
gc(reset=TRUE)
# used (Mb) gc trigger (Mb) max used (Mb)
# Ncells 303759 16.3 597831 32.0 303759 16.3
# Vcells 100442572 766.4 402928632 3074.2 100442572 766.4
tracemem(data)
# [1] "<0x363fda0>"
data <- as.data.table(data)
# tracemem[0x363fda0 -> 0x31e4260]: copy as.data.table.data.frame as.data.table
gc()
# used (Mb) gc trigger (Mb) max used (Mb)
# Ncells 304519 16.3 597831 32.0 306162 16.4
# Vcells 100444242 766.4 322342905 2459.3 200933219 1533.0
どのように解決するのですか?
以下のサイトから入手可能です。 v1.9.0+ . より ニュース :
<ブロッククオート
o以下
このS.O.投稿
は、関数
setDT
を受け取る関数が実装されました。
list
(名前付きおよび/または名前なし)を取るようになりました。
data.frame
(または
data.table
) を入力とし、同じオブジェクトを返します。
data.table
参照によって
(コピーなし)です。参照する
?setDT
の例を参照してください。
これは
data.table
の命名規則 - すべて
set*
関数は参照によって変更します。
:=
は参照によって変更される唯一のものです。
require(data.table) # v1.9.0+
setDT(data) # converts data which is a data.frame to data.table *by reference*
古い(現在は古い)回答は履歴を参照してください。
関連
-
[解決済み] HTML、PDF、DOCXで見栄えのするシンプルな手動のRMarkdownテーブル
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] データフレーム列の名前によるドロップ
-
[解決済み] リストをデータフレームに変換する
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み】サブセットされたデータフレーム内の未使用の因子レベルを削除する
-
[解決済み】データフレームから特定の列を抽出する
-
[解決済み】data.tableが他のdata.tableの参照である場合(コピーである場合)を正確に理解する。
-
[解決済み】ggplot2で軸のタイトルやラベルの大きさを変更する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R言語です。「接続を開くことができません」解決策
-
R read.table Error:埋め込まれたヌルが含まれているようです。
-
DEG解析で'row.names'に重複した名前を付けられない場合の解決法
-
Rによる系統的クラスタリング(階層)分析のグラフ形式の完全版
-
[解決済み] R:自然対数を使った方程式をnlsで使う
-
[解決済み] グループ化関数(tapply、by、aggregate)と*applyファミリ
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み] Rでロードされているパッケージのバージョンを調べるには?
-
[解決済み] ggplot2 の棒グラフで棒を並べる
-
[解決済み】ifelse()でDateオブジェクトがnumericオブジェクトにならないようにする方法