如何在分配中使用双重粘贴?

时间:2016-03-31 05:40:41

标签: r function user-defined-functions

我正在使用从OEC的API下载的不同国家/地区的数据集。

我分两步分工:

  1. 获取并清理某个数据集。行
  2. 创建一个下载任何数据集的函数。 我被困在这部分
  3. 对于第一部分,我确实运行了

    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]有效?非常感谢提前。

2 个答案:

答案 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)