【问题标题】:How do I not have R overwrite the other values我如何不让 R 覆盖其他值
【发布时间】:2020-04-14 12:22:21
【问题描述】:

这是我的功能

complete <- function(directory, id = 1:332) {
  files_list <- list.files(directory, full.names = TRUE)
  nobs <- numeric()
  for (i in id) {
    nob <- sum(complete.cases(read.csv(files_list[i])))

  }
  nobs <- c(nobs, nob)
  dat <- return(data.frame(id, nobs))
} 

complete(specdata, 1)
complete(specdata, c(2, 4, 8, 10, 12))

返回

> complete(specdata, 1)
  id nobs
1  1  117
> complete(specdata, c(2, 4, 8, 10, 12))
  id nobs
1  2   96
2  4   96
3  8   96
4 10   96
5 12   96

虽然我得到了正确的单个值, 不同的 id 应该有不同的结束值, 目前,所有值都被最终值覆盖。

如何让它不这样做?

【问题讨论】:

  • 把“nobs
  • @StupidWolf。谢谢。它奏效了,但与此同时,我找到了解决问题的另一种方法。
  • 此代码是 Coursera 上约翰霍普金斯大学 R 编程课程的第一个编程作业的一部分。根据 Coursera 荣誉守则,学生不得将完整版本的编程作业发布到互联网上,即使其中包含错误。请删除此问题以遵守荣誉准则。
  • Hey Len,对于发布此内容,我深表歉意。但我目前无法删除这篇文章。尝试删除此帖子时,它回复:“您无法删除此问题,因为其他人已投入时间和精力来回答它”,并提供此链接:stackoverflow.com/help/what-to-do-instead-of-deleting-question

标签: r loops return


【解决方案1】:

谢谢各位, 我最终找到了另一种方法。

complete <- function(directory, id = 1:332){
  files_list <- list.files(directory, full.names = T) # creates a list of files.
  dat <- data.frame() #creates an empty data frame
  nobs <- numeric()
  for (i in id) {
    dat <- read.csv(files_list[i])    
    nobs <- c(nobs, sum(complete.cases(dat)))
  }  
  return(data.frame(id, nobs))
}

【讨论】:

    【解决方案2】:

    @StupidWolf 的建议应该可以解决您的问题,但这里有另一种方法:

    complete <- function(directory, id = 1:332) {
       files_list <- list.files(directory, full.names = TRUE)[id]
       data.frame(id, nobs = sapply(files_list, function(x) nrow(na.omit(read.csv(x)))))
    }
    

    【讨论】:

    • data.frame(id, nobs = sapply(files_list, function(x) nrow(na.omit(read.csv(x))))) 中的错误:参数暗示不同的行数: 5、332
    • @strki 对不起...我犯了一个小错误。您需要根据idfiles_list 进行子集化。我已经更正了答案。
    • 嘿,我投了赞成票,但目前我的投票不被视为公开
    • @strki 要接受答案,您不需要任何声誉。您可以单击左侧投票按钮旁边的复选标记,以便将其标记为已解决。你可以阅读stackoverflow.com/help/someone-answers
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多