我正在使用从OEC的API下载的不同国家/地区的数据集。
我分两步分工:
对于第一部分,我确实运行了
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
将看起来像文本&#34; per2010_raw [keep]&#34;
如何使per2010_raw[keep]
有效?非常感谢提前。
答案 0 :(得分:3)
试试这个:
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
然后你可以为你的(国家,年)配对。理想情况下,不要在变量名中使用country和year,因为它可能会在一段时间后变得非常笨拙和不可扩展
#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 :(得分:-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)