27

次の形式の一連の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しか表示されません。

4

3 に答える 3

45

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

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

これらの関数は、一度に1つのオブジェクトしか処理できません。

于 2012-11-03T08:13:58.703 に答える
13

もう1つのオプションは、データフレームをcsvファイルとして保存することです。このオプションの利点は、長期保存を提供することです。つまり、10年以内に任意のプラットフォームでcsvファイルを開くことができるようになります。ファイルの場合、RDataRでしか開くことができず、バージョン間で開くことにお金をかけたくありません。

ファイルを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ファイルとして保存する理由はいくつかあります。たとえば、ファイルの読み取り/書き込みの速度やファイルサイズ。

于 2012-11-03T09:23:45.573 に答える
10

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受け入れられた回答から)単一のオブジェクトのみを保存できます。ある意味では、最初にファイルをロードせずload()にファイルの内容をプレビューすることはできないため、これはより「透過的」です。

于 2012-11-03T07:06:24.373 に答える