未定义列已选中v。重复'row.names'不允许

时间:2015-05-19 22:01:15

标签: r for-loop vector directory-structure

在for循环中,我试图在我的数据框中的两列数据之间运行一个函数,并在每次循环交互时移动到另一个数据集。我想将for循环的每个输出输出到一个答案向量中。

我无法通过以下错误(在我的代码下面列出),具体取决于我是否向数据< - read.csv ... 部分添加或删除row.names = NULL下面的代码(for循环的第4行):

**编辑包含目录引用,其中错误最终为:

corr <- function(directory, threshold = 0) {
  source("complete.R")

以上代码/我看不见的目录组织是我的错误

  lookup <- complete("specdata")
  setwd(paste0(getwd(),"/",directory,sep=""))
  files <-list.files(full.names="TRUE") #read file names
  len <- length(files)   
  answer2 <- vector("numeric") 
  answer <- vector("numeric")
  dataN <- data.frame()
      for (i in 1:len) {
          if (lookup[i,"nobs"] > threshold){
               # TRUE -> read that file, remove the NA data and add to the overall data frame
               data <- read.csv(file = files[i], header = TRUE, sep = ",")
               #remove incomplete
               dataN <- data[complete.cases(data),]
               #If yes, compute the correlation and assign its results to an intermediate vector.

        answer<-cor(dataN[,"sulfate"],dataN[,"nitrate"])
        answer2 <- c(answer2,answer)
      }
    }

setwd( “../”)   返程(ANSWER2)   }

1)read.table出错(file = file,header = header,sep = sep,quote = quote,:   不允许重复'row.names'

vs。)

2)[.data.frame(数据,2:3)中的错误:选择了未定义的列

我尝试了什么

  1. 直接引用列名“colA”
  2. 初始化数据和dataN以在for循环之前清空data.frames
  3. 将answer2初始化为空载体
  4. 更好地了解向量,矩阵和data.frames如何相互协作
  5. **谢谢!**

2 个答案:

答案 0 :(得分:1)

我的问题是我有上面代码中引用的函数.R文件,与我循环和分析的数据文件位于同一目录中。我的文件&#34; vector是一个不正确的长度,因为它正在读取我之前在函数中创建和引用的另一个.R函数。我相信这个R文件是创建&#39;未定义列&#39;

的原因

我道歉,最后我甚至没有在问题所在的地方放置正确的代码区域。

Key Takeaway:您可以随时在函数内的目录之间移动!事实上,如果你想对感兴趣的目录的所有内容执行一个函数,这可能是非常必要的

答案 1 :(得分:0)

一种方法:

# get the list of file names
files <- list.files(path='~',pattern='*.csv',full.names = TRUE)

# load all files
list.data <- lapply(files,read.csv, header = TRUE, sep = ",", row.names = NULL)

# remove rows with NAs
complete.data <- lapply(list.data,function(d) d[complete.cases(d),])

# compute correlation of the 2nd and 3rd columns in every data set
answer <- sapply(complete.data,function(d) cor(d[,2],d[,3]))

同样的想法,但实现略有不同

cr <- function(fname) {
    d <- read.csv(fname, header = TRUE, sep = ",", row.names = NULL)
    dc <- d[complete.cases(d),]
    cor(dc[,2],dc[,3])
}
answer2 <- sapply(files,cr)

CSV文件示例:

# ==> a.csv <==
#     a,b,c,d
# 1,2,3,4
# 11,12,13,14
# 11,NA,13,14
# 11,12,13,14
# 
# ==> b.csv <==
#     A,B,C,D
# 101,102,103,104
# 101,102,103,104
# 11,12,13,14