0

Rには、条件付きで .rda ファイルを読み込む必要がある関数があります。たとえば、関数のユーザーがロードするファイルを指定できるようにしたい場合、Rは対応するデータファイルをロードします。

この関数は 2 つの引数を取ります。状態 (「NY」) とロードする .rda ファイル (「data_0203.rda」) です。

読み取る必要があるプールにはそれほど多くの .rda ファイルがないため、次のような if ステートメントを実行する方法が 1 つであると考えました。

if(datafile=="data_9091"||datafile=="data_9091.rda")
{load("/Users/blahblahblah/data_9091.rda")
state.in=as.data.frame(data_9091[[which(names(data_9091)==(tolower(state)))]][1])
state.out=as.data.frame(data_9091[[which(names(data_9091)==(tolower(state)))]][2]})

else if(datafile=="data_9192"||datafile=="data_9192.rda")
{load("/Users/blahblahblah/data_9192.rda")
state.in=as.data.frame(data_9192[[which(names(data_9192)==(tolower(state)))]][1]
state.out=as.data.frame(data_9192[[which(names(data_9192)==(tolower(state)))]][2]}

私はそれがエレガントでも効率的でも何でもないことを知っています. 何か案は?

4

1 に答える 1

0

このload()関数は、ファイルから「膨らませた」オブジェクトの名前を返しrdaます。だからあなたは次のようなことができます

datafile <- gsub("\\.rda$", "", datafile)
dats <- load(paste("/Users/blahblahblah/", datafile, ".rda", sep="")
stopifnot(length(dats)==1)
dd<-get(dats[1])
state.in  <-as.data.frame(dd[[which(names(dd)==(tolower(state)))]][1]
state.out <-as.data.frame(dd[[which(names(dd)==(tolower(state)))]][2]
于 2014-05-22T20:46:39.977 に答える