2015-05-19 7 views
2

В цикле for я пытаюсь запустить функцию между двумя столбцами данных в моем кадре данных и переходить на другой набор данных, каждый интервал цикла , Я хотел бы выводить каждый вывод цикла for в один вектор ответов.Неопределенные столбцы Выбранные v. Duplicate 'row.names' не разрешены

Я не могу получить прошли следующие ошибки (перечислены ниже моего кода), в зависимости от того, если добавить или удалить row.names = NULL для данных < - read.csv ... часть следующего кода (линия 4 петли для-):

** Под редакцией включить ссылки каталога, где ошибка в конечном счете был:

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

Приведенный выше код/​​мой невидимый каталог organzation был где моя ошибка была

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 ("../") возвращения (Ответ2) }

1) Ошибки в read.table (файл = файл, заголовок = заголовок, SEP = SEP, цитата = цитате: дублировать '' row.names не допускаются

против)

2) Ошибка в [.data.frame (данные, 2: 3): неопределенные столбцы выбраны

То, что я пытался

  1. со ссылкой на имена столбцов непосредственно «КОЛА»
  2. инициализирующих данных и DataN опустошить data.frames перед для цикла
  3. инициализации Ответ2 в пустой вектор
  4. Получение лучшего понимания о том, как векторы, матрицы и data.frames работать друг с другом

** Спасибо! **

+0

Ваш код не очень эффективен и «R-ish», но я думаю, что он должен работать. Вы убедились, что читаете правильный CSV-файл? –

+0

Спасибо Марат. Да, это правильный CSV-файл. (текст с разделителями-запятыми) Каковы некоторые изменения эффективности, которые вы бы рекомендовали? –

ответ

1

Моя проблема заключалась в том, что я имел .r файл функции что я ссылался в коде выше, в том же каталоге, что и файлы данных, которые я просматривал и анализировал. Мой «файл» был неправильной длиной, потому что он читал другую функцию .R, которую я сделал и ссылался ранее в этой функции. Я считаю, что этот файл R - это то, что создало «неопределенные столбцы»

Приносим извинения, что я даже не поднял правильную область кода, где возникла проблема.

Key Takeaway: вы всегда можете перемещаться между каталогами внутри функции!На самом деле это может быть очень необходимо, если вы хотите выполнить функцию по всему содержанию интересующей директории

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])) 

Та же идея, Buth немного отличается реализация

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 
+0

Еще раз спасибо @Marat Я попытался включить вторую группу кодов внутри оператора if if и for-loop. Теперь я получаю сообщение об ошибке «Ошибка в read.table (file = file, header = header, sep = sep, quote = quote,: больше столбцов, чем имена столбцов», который немного отличается от выбранных «неопределенных столбцов». вы хотите, чтобы вы упоминали об агрегированных моих файлах, но я хочу прокручивать каждый файл по отдельности, поэтому я не мог точно определить, как применить его к моему сценарию. Я просмотрел разные части моих кодов и nocol (данные), как и следовало ожидать, поэтому я все еще в тупике –

+0

@Kara_F, используя первый подход, вы все равно можете посмотреть на каждый набор данных, они просто организованы как элементы списка. Поскольку у вас проблемы с read.table, Я предполагаю, что что-то не так с именем файла .csv или с его содержимым. –