2017-04-13 13 views
1

私は解析する予定のデータをRにいくつか持っています。ただし、ファイルにはデータが表示されていません。代わりに、データ内の変数のみを表示しています。以下は、データをロードするために使用した手順と生成された出力です。私はデータを表示するために取得するにはどうすればよいRウィンドウでRデータファイルを開くには

load("C:\Users\user\AppData\Local\Temp\1_29_923-Macdonell.RData") 

data=load("C:\Users\user\AppData\Local\Temp\1_29_923-Macdonell.RData") 

data 

[1] "HeightFinger"

+0

バックスラッシュをスラッシュ(\//)に変更するか、\を –

+0

に置き換えるか、二重バックスラッシュに変更してください...上のコードを試したときに何が起こったのですか? – r2evans

答えて

2

あなたread ?help場合、それはloadの戻り値があることを言う:

目に見えない、作成されたオブジェクトの名前の文字ベクトル。

これは、(.GlobalEnvしばしば常にではないが、現在の環境をデフォルト)環境にオブジェクトを挿入することでloadコマンドの本当の仕事は、side-effectであること(ただし、確かに状態はありません)を示唆しています。 load(...)を呼び出した場所からすぐにアクセスできます。例えば

、私はあなたがあなたのrdaファイルを持っているかもしれない変数を推測することができるかどうか:あなたは彼らが現在の環境に保存されているないになりたい場合は、あなたが環境を設定することができます

x 
# Error: object 'x' not found 

# either one of these on windows, NOT BOTH 
dat = load("C:\\Users\\user\\AppData\\Local\\Temp\\1_29_923-Macdonell.RData") 
dat = load("C:/Users/user/AppData/Local/Temp/1_29_923-Macdonell.RData") 

dat 
# [1] "x" "y" "z" 
x 
# [1] 42 

(私はparent=emptyenv()を使用していますが、それは厳密には必要ではありません。そのオプションを含まないことにはいくつかの小さな影響があります。)

myenv <- new.env(parent = emptyenv()) 
dat = load("C:/Users/user/AppData/Local/Temp/1_29_923-Macdonell.RData", 
      envir = myenv) 
dat 
# [1] "x" "y" "z" 
x 
# Error: object 'x' not found 
ls(envir = myenv) 
# [1] "x" "y" "z" 

あなたはいくつかの方法であなたのデータを取得することができますここから:

ls.str(myenv) # similar in concept to str() but for environments 
# x : num 42 
# y : num 1 
# z : num 2 
myenv$x 
# [1] 42 
get("x", envir = myenv) 
# [1] 42 

サイドノート:あなたは私が私の変数名としてdatを使用していることに気づいたかもしれません

dataの代わりにあなたは確かにそれを使用することは許されていますが、既存の変数や関数と一致する変数名を使用すると、あなたを噛む可能性があります。たとえば、データをロードしている間は、すべてのコードが正常に動作します。エラーメッセージがすぐに自明ではないことを

mean(data$x) 
# Error in data$x : object of type 'closure' is not subsettable 

:しかし、あなたはがあなたのdata変数にあなたのオブジェクトを事前にロードすることなく、あなたのコードの一部を実行する場合は、おそらくのようなエラーが発生します。問題は、あなたの質問と同じように定義されていない場合、ここでdataファンクションdataを指します。プログラミング用語、closure is a special type of function、そうではエラーが実際に言っておく必要があります。

# Error in data$x : object of type 'function' is not subsettable 

datがサブセットとdat$xが何かを意味することができますが、あなたは機能自体に$サブセットメソッドを使用することができないことを意味します。 (mean関数を参照すると、mean$xは実行できません)。ただし、ここで修正されたエラーメッセージはそれほど混乱はありませんが、問題がどこにどこにあるかはっきりとは分かりません。

このため、多くの経験豊富なプログラマーは、一意の変数名を使用することをお勧めします(たぶんx以上の:-)。あなたは私の提案を使用して、代わりにdatをという名前を付けた場合は、あなたのデータをプリロードないの間違いは、意志の代わりとエラー:より多くの意味を持つとトラブルシューティングが容易です

mean(dat$x) 
# Error in mean(dat$x) : object 'dat' not found 

1

Rオブジェクトを保存するには2通りの方法がありますが、それらは混在しています。最初の方法では、save()のオブジェクトの任意のコレクション環境のファイルにあります。そのファイルがload()の場合、これらのオブジェクトは現在の環境で元の名前ので再作成されます。これは、Rがワークスペースを保存して再利用する方法です。

saveRDS()関数を使用して1つのRオブジェクトをファイルに格納(シリアライズ)し、readRDS()関数を使用して再作成します。 の結果がreadRDS()に割り当てられていないと、画面に印刷されて漂ってしまいます。

例以下:

# Make a simple dataframe 
testdf <- data.frame(x = 1:10, 
        y = rnorm(10)) 

# Save it out using the save() function 
savedir <- tempdir() 
savepath <- file.path(savedir, "saved.Rdata") 
save(testdf, file = savepath) 

# Delete it 
rm(testdf) 

# Load without assigning - and it's back in your environment 
load(savepath) 
testdf 

# But if you assign the results of load, you just get the name of the object 
wrong <- load(savepath) 
wrong 


# Compare with the RDS: 
rds_path <- file.path(savedir, "testdf.rds") 
saveRDS(testdf, file = rds_path) 
rm(testdf) 
testdf <- readRDS(file = rds_path) 
testdf 

なぜ2つの異なるアプローチ? save() - 環境アプローチは、後で復元できる環境全体のチェックポイントを作成するのに適しています。これはRがそれを使用するためですが、それはそれです。 RDSの方法は、あなたが割り当てることができます

testdf$z <- "blah" 
load(savepath) 
testdf # testdf$z is gone 

:そのような環境が雑然とを取得することがあまりにも簡単だし、オブジェクトを使用load()は、現在の環境内のオブジェクトと同じ名前を持つ場合、そのオブジェクトが上書きされますあなたがここでやろうとしているように、読んでいる名前。とにかくオブジェクトを頻繁に保存してはいけません。最初からオブジェクトを再作成することは、あなたのRコードがあなたが思っていることを確実にするための最良の方法です。

+1

ニース、私たちの答えは完全に冗長ではない、それらにいくつかの良い補完があります。 – r2evans

+0

私はあなたの大胆なコメントは、オブジェクトを上書きすることは誇張することはできないと思う。さらに重要なことは、指示、メッセージ、または警告なしで、メッセージを静かに上書きすることです。ユーザーがそれを完了しなければならない唯一の印象は、将来の計算が以前の結果と一致しない可能性があることです。 (私は苦しい経験から話します...) – r2evans

+0

@ r2evans同じです。 :( –

関連する問題