在函数中使用for循环,仅返回最后一个值

时间:2018-09-01 14:16:25

标签: r

我正在编写一个获取数据目录的函数,并读取它们,并且(如果达到完整案例的阈值),则计算数据中两个变量(“硫酸盐”和“硝酸盐”)之间的相关性。我希望它在for循环中运行以创建相关值的数字矢量(目录中每个文件一个值)。

但是,当我运行代码时,它仅返回最后一个值。

我对R很陌生(因此可能会犯一些简单的错误,并且安装了R的最新版本)。下面是代码:

corr <- function(directory, threshold = 0) {
  filenames3 <- list.files(directory, pattern = ".csv", full.names = TRUE)
  loop_length <- length(filenames3)
  correlation_values <- numeric()

  for(i in loop_length) {

    read_in_data3 <- read.csv(filenames3[i])
    complete_boolean <- complete.cases(read_in_data3)
    nobs2 <- sum(complete_boolean) 
    data_rmNA <- read_in_data3[complete_boolean, ] 

    if(nobs2 > threshold) {
    correlation_values <- c(correlation_values,
                        cor(data_rmNA[["sulfate"]],
                            data_rmNA[["nitrate"]]))
    }
  }
  correlation_values
}

corr("C:/Users/Danie/OneDrive/Documents/R/specdata")

我尝试指定向量的长度,例如correlation_values <- numeric(length = loop_length)。这将返回正确长度的向量,但是除最后一个正确运行的值外,所有值均为0。我已经看过类似的问题,但仍然找不到解决我问题的方法。

我认为我正在某个地方的循环中丢失信息(重写变量或某些内容)。

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为您需要说for(i in 1:loop_length)而不是for(i in loop_length)

R将遍历所提供向量中的每个元素,但是现在您的向量为长度1,这就是为什么仅返回最后一个值的原因。

相关问题