4

私は現在のプロジェクトを再現可能にしようとしており、他のいくつかのドキュメントを呼び出して実行するために使用されるマスター ドキュメント (最終的には .rmd ファイル) を作成しています。このようにして、私と他の調査員は 1 つのファイルを開いて実行するだけで済みます。

現在のセットアップには、マスター ファイル、2 つの読み込みファイル、2 つのデータベースの 3 つの層があります。マスター ファイルは source() を使用して読み込みファイルを呼び出し、読み込みファイルは .csv データベースを解析してラベルを適用します。

現在使用しているデータ管理ソフト(REDCap)では、更新データをダウンロードするたびに読み込みファイルとデータベースが自動生成されます。

ただし、読み込みファイルには、環境内のすべてのオブジェクトを削除するコード行があります。レポートを実行するたびに読み込みファイルを個別に開く必要がないように、読み込みファイルをマスター ファイルから直接編集したいと考えています。具体的には、読み込むファイルはすべて同じなので、それぞれの行 #2 を削除したいと思います。

Google で検索して、file.edit() を試しましたが、何も見つかりませんでした。それが可能かどうかさえわかりませんが、私は尋ねると思いました。この質問を改善できるかどうか、または回答するために追加のコードが必要かどうかをお知らせください。ありがとう!

現在の関連するマスター コード (一般性のために編集):

 source("read-in1")  
 source("read-in2")

現在の関連する読み取りファイル コード (データベース名を除いて、各ファイルで同じ):

 #Clear existing data and graphics  
 rm(list=ls())  
 graphics.off()  
 #Load Hmisc library  
 library(Hmisc)  
 #Read Data  
 data=read.csv('database.csv')  
 #Setting Labels  

[読み取りコードは切り捨てられました]

その他の詳細:
OS: Windows 7 Professional x86
R バージョン: 3.1.3
R Studio バージョン: 0.99.441

4

3 に答える 3

4

次のようなものを試すことができreadLines()ます(以下の@Hong Ooiからの提案によって大幅に簡素化されました):

eval(parse(readLines("read-in1.R")[-2]))

はるかにペダンティックな私の元のソリューション:

f <- file("read-in1.R", open="r")
t <- readLines(f)
close(f)

for (l in t[-2]) { eval(parse(text=l)) }

for()ループは、2 番目の行を除いて、テキスト ファイルの各行を解析して評価するだけです (これは、-2 インデックス値が行うことです) 。より長いファイルを読み書きしている場合、次の方法は2番目のオプションよりもはるかに高速ですが、@Hong Ooiのものよりも好ましくありません。

f <- file("read-in1.R", open="r")
t <- readLines(f)
close(f)

f <- file("out.R", open="w")
o <- writeLines(t[-2], f)
close(f)
source("out.R")
于 2015-06-16T23:46:16.983 に答える
2

申し訳ありませんが、この質問に気付くのが遅くなりましたが、REDCap API へのアクセスを取得し、redcapAPIパッケージまたはパッケージのいずれかを使用して調査することをお勧めしREDCapRます。これらのパッケージはどちらも、ダウンロード スクリプトを使用せずに、データを REDCap から R に直接エクスポートできます。 redcapAPIすべてのフォーマットと日付を適用することさえできます (REDCapRこれは今でもできるかもしれません。それは計画にありましたが、しばらく使用していませんでした)。

于 2015-07-13T17:11:42.873 に答える
1

これを試すことができます。いくつかのシェル コマンドを呼び出すだけです: (1) ファイルの名前を変更し、(2) rm(list=ls()) を含まないすべての行を元のファイルと同じ名前の新しいファイルにコピーし、(3) 削除します。コピー。

files_to_change <- c("read-in1.R", "read-in2.R")
for (f in files_to_change) {
    old <- paste0(f, ".old")
    system(paste("cmd.exe /c ren", f, old))
    system(paste("cmd.exe /c findstr /v rm(list=ls())", old, ">", f))
    system(paste("cmd.exe /c rm", old))
}

このループを呼び出した後、

#Clear existing data and graphics  
graphics.off()  
#Load Hmisc library  
library(Hmisc)  
#Read Data  
data=read.csv('database.csv')  
#Setting Labels  

read-in*.R ファイルに。これをバッチスクリプトに入れることができます

@echo off
ren "%~f1" "%~nx1.old"
findstr /v "rm(list=ls())" "%~f1.old" > "%~f1"
rm "%~nx1.old"

「example.bat」と言って、同じように を使用して呼び出しますsystem

于 2015-06-17T00:43:51.670 に答える