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

R 如何在分配中使用双粘贴?,r,function,user-defined-functions,R,Function,User Defined Functions,我正在使用从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_va

我正在使用从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]
    
    原始文件将是完美的,但是
    per2010\u clean
    将显示为文本“per2010\u raw[keep]”

    如何使
    per2010\u 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
    

    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/")
    clean <<- as.data.frame(fromJSON(weblink))[keep]
    }
    country_data("per", 2010)
    

    keep不要编写有副作用的函数。不要使用
    听取罗兰建议的一个理由(我完全同意)是,如果您的工作区中有任何名为
    clean
    的项目,调用上面的
    country\u data
    会将其删除并替换。这可能是您所期望的,但这不是大多数R程序员所希望的。我们通常只希望在使用
    
    
    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)