5

私は R を学ぼうとしている Stata ユーザーです。

私のStataコードでは、ローカルマクロとして保存した長いフォルダーパスがいくつかあります。分析で使用するために、これらのフォルダーの両方に複数のファイルがあります。

Rでは、フォルダーの1つにあるファイルを参照するたびに作業ディレクトリを変更できますが、それは間違いなく良い方法ではありません。フォルダ パスを文字列として R に保存しても、それらを参照する方法がわかりません。たとえば、Stata では「folder1」を使用します。

R で Stata コードを 1 行ずつ書き直そうとするのは、R を学ぶ最善の方法ではないのではないかと考えています。

誰か助けてくれませんか?

4

3 に答える 3

7

多分あなたがしたいfile.path()ですか?

a <- "c:"
b <- "users"
c <- "charles"
d <- "desktop"

setwd(file.path(a,b,c,d))
getwd()
#----
[1] "c:/users/charles/desktop"

あなたが望むことをするために、それをラップsourceするかread.XXX、それ以外のものをラップすることができます。

于 2013-03-28T20:35:21.617 に答える
6

まず、以前の Stata ユーザーとして、R for Stata Users をお勧めします。R のマクロに関するこの記事もあります。@Nick Coxは、物事をもっと違う方法で行うことを学ぶ必要があるというのは正しいと思います。しかし、あなたと同じように (少なくともこの場合は)、私はしばしば、Stata でそれを行う方法についての以前の知識を持って新しいタスクを開始し、そこから進んでいることに気づきます。アプローチが似ていることに気付くことがあります。ときどき、R を Stata のように振る舞わせることができます (例: loops と vectorizationなど)。

あなたの質問を次のように捉えるかどうかはわかりませんが、試してみましょう。

Stata では、次のように書くのが一般的です。

global mydata "path to my data directory/"

データをインポートするには、次のように入力します。

insheet using "${mydata}myfile.csv"

以前の Stata ユーザーとして、私は R で同様のことをしたいと考えています。

mydata <- "path to my data directory/"

このディレクトリにある csv ファイルをインポートし、myfile というデータ フレームを作成するには、次のコマンドを使用します。

myfile <- read.csv(paste(mydata, "myfile.csv", sep=""))

またはより効率的に...

myfile <- read.csv(paste0(mydata, "myfile.csv"))

私はまだあまり効率的な R ユーザーではないので、他の人はこのアプローチの欠点に気付くかもしれません。

于 2013-03-28T23:06:35.087 に答える
1

ファイルに適用されたときの「ローカル」という用語は、効率のためにメモリにロードされたことを意味するという文脈から推測していますか?もしそうなら、ほとんどすべての通常の R オブジェクトがそのように処理されることを理解する必要があります。?read.tableおよびを参照してください?loadffデータを非ローカルのままにしておく唯一の方法は、SQL クエリをサポートするか、やなどの特殊なパッケージを使用するインターフェイス パッケージを持つデータベースにデータを配置することですbycol

それと、file.path() を使用するという Chase のアイデア以外に、ファイルまたは接続への参照は、文字値が (さまざまな名前の) 引数として与えられる適切な読み取り/ロード/スキャン関数を使用して行われます。?fileそのヘルプ ページの追加リンクのいくつかを使用して、おそらくそれをたどると、さまざまな低レベル関数を確認できます。構成の 1 つ以上の結果をfile.path文字ベクトルに格納し、簡単に参照できるように名前を付けることができます。

 pathvecs <- c(User= "~/", hrtg="~/Documents/Heritage/")
 pathvecs
#                   User                    hrtg 
#                   "~/" "~/Documents/Heritage/" 
pathvecs["hrtg"]
#                   hrtg 
#"~/Documents/Heritage/" 
于 2013-03-28T20:44:04.497 に答える