我正在尝试编写一个遍历包含332个文件的目录的函数。每个文件包含一个空气污染数值的数据框。两个柱是硝酸盐和硫酸盐。
当我浏览每个文件时,我需要确定它们是否满足完整案例的阈值标准。基本上,代码应该省略任何具有N/A或缺少值的行。如果它们确实符合标准,我将需要使用cor()函数计算硝酸盐和硫酸盐之间的相关性。
这是我的伪代码:
corr <- function(directory, threshold = 0){
setwd(paste("C:/...", directory, sep = "/"))
# Writing from here on works fine
correlations <- numeric()
files <- list.files(getwd(), full.names = TRUE)
for (i in 1:332) {
read_file <- read.csv(file[i])
complete_observation <- read_file[complete.cases(read_file), ]
get number_complte using nrow
if (number_complete >= threshold) {
attach(complete_data)
correlations <- c(correlations, cor(sulfate, nitrate))
detach(complete_data)
}
}当我手动编写这段代码(从注释开始)时,它工作得很好,并且我得到了我想要的结果,这是一个特定长度的相关向量。
但是,当我通过调用我创建的函数(从代码的开头开始)来尝试它时,我得到了一个空向量。我注意到,当我在追加cor数据后嵌套一个返回(关联)时,它返回一个单一值,这表明它正在计算一个满足条件的相关值,并将其存储在最后,但一旦它退出循环,它就会重新初始化为0。
这让我感到困惑,因为它在手动输入时不是这样的:只有在我运行函数时才会发生这种行为。在这两种情况下,函数的行为应该没有区别。我该如何解决这个问题呢?
发布于 2014-10-20 12:32:24
通过在第二个结束括号之后放置一个return语句,基本上在每个for循环迭代之后,我能够让我的函数以我想要的方式工作
corr <- function(...){
correlation <- numeric()
for(...){
...
if (num_com >= threshold){
correlation <- c(correlation, cor(x,y))
correlation <- c(correlation, cor(data$nitrate, data$sulfate))
}
}
return(correlation)
}https://stackoverflow.com/questions/26457510
复制相似问题