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

How to use double paste in assign?

我正在处理从 OEC 的 API 下载的不同国家数据集。

我将我的工作分为两步:

  1. 获取并清理某个数据集。好的
  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]有效?非常感谢。

试试这个:

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

然后你就可以为你的(国家,年份)配对了。理想情况下,不要在变量名中使用国家和年份,因为一段时间后它会变得非常笨重且无法扩展

#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

你的方法很有用,谢谢。稍微更改一下您的代码,我就更接近我想要的东西了。

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)