繁体   English   中英

在嵌套函数R中调用对象

[英]calling objects in nested function R

首先,我是一名R初学者,目前正在参加R编程课程。 在教授R的基础知识时非常缺乏,所以我试图通过Stack Overflow上的精彩贡献者来学习自己。 我试图弄清楚嵌套函数是如何工作的,这意味着我还需要了解词法作用域的工作原理。 我有一个函数可以计算多个CSV文件中的完整案例并立即吐出一个漂亮的表格。

  • 这是CSV文件: https//d396qusza40orc.cloudfront.net/rprog%2Fdata%2Fspecdata.zip
  • 这是我的代码,我意识到如果我使用apply东西它会更干净但它的工作原理如下:

     complete<- function(directory, id = 1:332){ data <- NULL for (i in 1:length(id)) { data[[i]]<- c(paste(directory, "/", formatC(id[i], width=3, flag=0), ".csv", sep="")) } cases <- NULL for (d in 1:length(data)) { cases[[d]]<-c(read.csv(data[d])) } df <- NULL for (c in 1:length(cases)){ df[[c]] <- (data.frame(cases[c])) } dt <- do.call(rbind, df) ok <- (complete.cases(dt)) finally <- as.data.frame(table(dt[ok, "ID"]), colnames=c("id", "nobs")) colnames(finally) <- c('id', 'nobs') return(finally) } 

现在我想调用数据帧不同的变量finally是这个新功能是在上述函数的输出:

corr<-function(directory, threshold = 0){
    complete(directory, id = 1:332)
    finally$nobs
}
corr('specdata')

如果没有finally$nobs此功能吐出来的数据帧,因为它应该,但是当我尝试打电话给变量nobs的对象finally ,它说对象finally没有找到。 我意识到这个问题是由于我对词法范围的主题缺乏了解,我的教授还没有真正明确词法范围,所以我不完全确定如何在嵌套函数环境中找到对象...任何帮助会很棒。

该对象finally只在函数complete()中的范围内。 如果你想对你要返回的对象做更多的事情,你需要将它存储在你正在使用的环境中的变量中(在这种情况下,你正在使用的环境是函数corr() 。如果我们不是在任何功能内部工作,环境将是“全球环境”)。 换句话说,此代码应该工作:

corr<-function(directory, threshold=0){
    this.finally <- complete(directory, id=1:332)
    this.finally$nobs
}

我正在调用complete() this.finally返回的对象,以帮助将它与finally现在超出​​范围的对象区分开来。 当然,您可以随意调用它!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM