如何在分配中使用双粘贴?
How to use double paste in assign?
我正在处理从 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
将看起来像文本 "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)
我正在处理从 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
将看起来像文本 "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)