【问题标题】:Why isn't my for loop functioning without data.frame()?为什么我的 for 循环在没有 data.frame() 的情况下无法运行?
【发布时间】:2023-04-08 11:05:01
【问题描述】:

我正在学习 Coursera 数据科学课程。我在找到正确答案的过程中评估了我的代码,由于某种原因,从第二步到最后一步没有产生我期望的输出,即使我的最终答案是正确的。

这是我的最终代码。它是一个函数,它读取一个充满 csv 文件的目录并计算每个文件中的完整值并将其与关联的 id 号一起打印出来。

complete<-function(dir, id=1:332){
    comp_cases<-numeric()
    files<-list.files(dir, full.names=TRUE){
        for (i in id){
            data<-read.csv(filelist[i])
            vals<-sum(complete.cases(data)
            comp_cases<-c(comp_cases,v)
           }


  data.frame(id, comp_cases)
}

但是,当我省略 data.frame(id, comp_cases) 并仅调用 comp_cases 时,我会得到第一个文件中的完整案例数,而不是所有文件中完成数的向量。如果没有循环本身之外的 data.frame(id, comp_cases),为什么我的循环不能运行? data.frames() 到底在做什么?我在 Windows 上使用 R 3.42。

【问题讨论】:

  • 我强烈建议在你的代码中使用空格。它会让它更容易阅读。

标签: r for-loop dataframe


【解决方案1】:

在 R 中调用函数时返回的值就是语句的值。当然,您可以使用return(something) 显式返回一个值,但是当您不需要显式导致函数返回时,许多R 程序员会省略对return() 的调用,而只是以函数调用结束函数(在这种情况下 data.frame(...) 返回一个值,或者如果该值已经返回,程序员可以只计算要返回的值,如下所示:

my_fun <- function(x){
    out <- NULL # initialize the return value.

    ... do things ... 

    out # implicitly return this value
}

顺便说一句,R 中的所有内容都有一个返回值。 forwhile 循环返回 NULL,并且赋值(例如 x = 3)返回赋值。 R 程序员可能会用最后一点做一些奇怪的事情,例如:

complete<-function(dir, id=2:332){
    comp_cases<-numeric()
    files<-list.files(dir, full.names=TRUE){
        for (i in id){
            data<-read.csv(filelist[i])
            vals<-sum(complete.cases(data)
            comp_cases<-c(comp_cases,v)
           }


  answer <- data.frame(id, comp_cases)
}

在技术上是有效的代码,但从代码作为文档的角度来看很奇怪

【讨论】:

  • 这是一个很好的解释,但只是为了把事情带回家,OP,如果你希望你的函数只返回 comp_cases 对象,你可以将函数的最后一行设为 comp_casesreturn(comp_cases).
猜你喜欢
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多