web-dev-qa-db-ja.com

data.framesの保存と読み込み

次の形式のtwitterのセットに基づいてデータフレームを作成しました。

_ rdmTweets <- userTimeline("rdatamining", n=200)
 df <- do.call("rbind", lapply(rdmTweets, as.data.frame))
_

今、私はこの方法で保存してデータフレームを保存しています:

_ save(df, file="data")
_

保存したデータフレームを将来使用するためにロードするにはどうすればよいですか?私が使用する場合:

_  df2 <- load("data")
_

dim(df2)を適用すると、データフレームに含まれるツイートの量が返されますが、1しか表示されません。

24
Layla

@mrdwabが指摘しているように、saveは名前とデータ/構造を保存します(実際、1つのファイルに複数の異なるRオブジェクトを保存できます)。期待どおりに動作するストレージ関数のペアがもう1つあります。これを試して:

saveRDS(df, file="mytweets.rds")
df2 <- readRDS("mytweets.rds")

これらの関数は、一度に1つのオブジェクトのみを処理できます。

39
seancarmody

別のオプションは、データフレームをcsvファイルとして保存することです。このオプションの利点は、長期ストレージを提供することです。つまり、10年後にすべてのプラットフォームでcsvファイルを開くことができます。 RDataファイルを使用すると、Rでしか開くことができず、バージョン間で開くときにお金をかけたくありません。

ファイルをcsvとして保存するには、単にread.csvおよびwrite.csv、 そう:

write.csv(df, file="out.csv", row.name=FALSE)
df = read.csv("out.csv", header=TRUE)

以下のGavinのコメントは、いくつかの点を挙げています。

CSVルートは、表形式のデータに対してのみ機能します。

完全に正しい。ただし、データフレームを(OPと同様に)保存する場合、データは表形式になります。

Rを使用すると、何らかの理由で保存形式が変更され、古い形式を別の関数でロードできない場合、常に古いバージョンを起動してデータを読み取り、エクスポートすることができます。

悪魔のアドヴァケートをプレイするには、この引数をExcelで使用して、データをxlsとして保存できます。ただし、データをcsv形式で保存すると、このことを心配する必要がなくなります。

Rのファイル形式は文書化されているため、そのオープン情報を使用して別のシステムでバイナリデータを合理的に簡単に読み取ることができます。

私は完全に同意します-「簡単」は少し強いですが。これが、RDataファイルとして保存することがそれほど重要ではない理由です。 ただし表形式のデータを保存する場合、csvファイルを使用しないのはなぜですか?

レコードについては、表データをRDataファイルとして保存する理由がいくつかあります。たとえば、ファイルまたはファイルサイズの読み取り/書き込みの速度。

13
csgillespie

saveは、データセットの名前とデータを保存します。したがって、load("data")に名前を割り当てないでください。言い換えれば、単に次を使用します。

_load("data")
_

df(またはファイル "data"に含まれているもの)という名前のオブジェクトを現在のワークスペースにロードします。

ただし、ファイルにはもっと元の名前を付けることをお勧めします。スクリプトファイルやデータファイルなどを思い出せるように、拡張子を追加することを検討します。


次の簡単な例を使用して作業してください。

_rm(list = ls())              # Remove everything from your current workspace
ls()                         # Anything there? Nope.
# character(0)
a <- 1:10                    # Create an object "a"
save(a, file="myData.Rdata") # Save object "a"
ls()                         # Anything there? Yep.
# [1] "a"
rm(a)                        # Remove "a" from your workspace
ls()                         # Anything there? Nope.
# character(0)
load("myData.Rdata")         # Load your "myData.Rdata" file
ls()                         # Anything there? Yep. Object "a".
# [1] "a"
str(a)                       # Is "a" what we expect it to be? Yep.
#  int [1:10] 1 2 3 4 5 6 7 8 9 10
a2 <- load("myData.Rdata")   # What about your approach?
ls()                         # Now we have 2 objects
# [1] "a"  "a2"
str(a2)                      # "a2" stores the object names from your data file.
#  chr "a"
_

ご覧のとおり、saveを使用すると、複数のオブジェクトを一度に保存およびロードできます。これは、複数のデータセットをまとめて保持するプロジェクトで作業する場合に便利です。

一方、saveRDS(from 受け入れられた回答 )では、単一のオブジェクトのみを保存できます。 load()ではファイルの内容をプレビューすることはできません 最初に読み込むことなく、これはいくつかの点でより「透明」です。

10