2016-03-31 5 views
1

私はOECのAPIからダウンロードした異なる国のデータセットで作業しています。割り当てにダブルペーストを使用するには?

私は2つのステップで私の仕事を分割しています:

  1. は、特定のデータセットを取得し、清掃。 OK
  2. 任意のデータセットをダウンロードする関数を作成します。 私は
    chile2013_df <- as.data.frame(fromJSON("http://atlas.media.mit.edu/hs92/export/2013/chl/all/show/")) 
    keep <- c("data.hs92_id", "data.import_val", "data.export_val") 
    chile2013_df <- chile2013_df[keep] 
    

    を実行しなかった最初の部分については、この部分

にこだわって、それは大丈夫ですと動作しますが、私は関数を作成したい場合は、のは言わせ

私が実行した場合、
country_data <- function(COUNTRYCODE, YEAR) { 
assign(paste(COUNTRYCODE, YEAR, "_raw", sep=""), as.data.frame(fromJSON(paste("http://atlas.media.mit.edu/hs92/export/",YEAR,"/",COUNTRYCODE,"/all/show/", sep=""))), envir = globalenv()); 
assign(c("keep"), c("data.hs92_id", "data.import_val", "data.export_val"); 
assign(paste(COUNTRYCODE, YEAR, "_clean", sep=""), paste(COUNTRYCODE, YEAR, "_raw[keep]", sep="")); 
envir = globalenv()) 
} 

country_data("per","2010") 

生ファイルは完璧ですが、その後per2010_cleanは "per2010_raw [keep]"と表示されます

per2010_raw[keep]を有効にするにはどうすればよいですか?事前に多くのおかげです。そして、あなたは(国、年)のごペアのためmapplyでき

keep <- c("data.hs92_id", "data.import_val", "data.export_val") 
country_data <- function(COUNTRYCODE, YEAR) { 
    weblink <- paste0("http://atlas.media.mit.edu/hs92/export/",YEAR,"/",COUNTRYCODE,"/all/show/") 
    rawdat <- as.data.frame(fromJSON(file=weblink)) 
    cleandat <- rawdat[keep] 
    return(list(raw=rawdat, clean=cleandat)) 
} #end country_data 

答えて

3

はこれを試してみてください。理想的には、

#pulling data 
alldat <- mapply(function(x, y) list(country_data(x, y)), c("per","chl"), c(2010, 2013)) 
names(alldat) <- paste0(c("per","chl"), c(2010, 2013)) 

#accessing data 
alldat[["chl2013"]]$raw 
alldat[["chl2013"]]$clean 
-1

しばらく後に、それはかなり扱いにくくスケーラブルで育つことができるよう、あなたの変数名に国と年を使用してはいけないあなたのアプローチが有用である、ありがとう。あなたのコードを少し変更する私は私が望むものに近いものを得ています。

keep <- c("data.hs92_id", "data.import_val", "data.export_val") 
country_data <- function(COUNTRYCODE, YEAR) { 
weblink <- paste0("http://atlas.media.mit.edu/hs92/export/",YEAR,"/",COUNTRYCODE,"/all/show/") 
clean <<- as.data.frame(fromJSON(weblink))[keep] 
} 
country_data("per", 2010) 
+0

副作用のある関数を記述しないでください。 '<< - 'や 'assign'を使わないでください。 – Roland

+1

私が完全に同意したRolandのアドバイスに耳を傾ける一つの理由は、あなたのワークスペースに 'clean'という名前のアイテムがあれば、上記の' country_data'への呼び出しはそれを拭き取って置き換えるということです。おそらくそれがあなたが期待するものですが、ほとんどのRプログラマが起こりたいことではありません。一般的に、 '< - 'を使用するときにのみそのようにしたいとします。もしあなたが "replace_clean_with_new_country_data"に名前を変更したのであれば、関数型プログラミングを行う人にとってはあまり心配しないでしょう。 –

関連する問題