将具有阈值的环路输出绑定到R 3.3.1中的向量

时间:2016-08-04 23:59:01

标签: r for-loop vector

我正在进行Coursera R编程课程,并且在尝试将for循环结果绑定到矢量时遇到了麻烦。

我已经确保分析代码在单个表上运行,但我不完全确定如何使其绑定所有332值。

  corr <- function(directory, threshold = 0, id = 1:332) {
  filename <- list.files(directory, full.names = TRUE)
  a <- numeric()
  for(i in id) {
    tmp_data <- read.csv(filename[i])
    nobs <- sum(complete.cases(tmp_data))
    if(nobs < threshold) {
      a} else {
      nonas <- tmp_data[!is.na(tmp_data$sulfate) & !is.na(tmp_data$nitrate),]
      x <- corr(nonas$sulfate, nonas$nitrate)
      a[i] <- x
      }
  }
  a
}

当我运行此命令时,我收到此错误:

> x <- corr("specdata", 20)
Error in list.files(directory, full.names = TRUE) : 
invalid 'path' argument 

在其他功能中,我对list.files行没有任何问题。我知道我做错了什么,但我无法理解。

1 个答案:

答案 0 :(得分:0)

我明白了。我不知不觉在我的代码中有一个递归。它应该是cor(),而不是corr()。

corr <- function(directory, threshold = 0, id = 1:332) {
  filename <- list.files(directory, full.names = TRUE)
  a <- c()
  for(i in id) {
    tmp_data <- read.csv(filename[i])
    nobs <- sum(complete.cases(tmp_data))
    if(nobs > threshold) {
        nonas <- tmp_data[!is.na(tmp_data$sulfate) & !is.na(tmp_data$nitrate),]
        x <- cor(nonas$sulfate, nonas$nitrate)
        a[i] <- x
      }
  }
  b <- na.omit(a)
}