Dear R-helpers,

I am stuck on an error in R:  When I run my code (below), I get this error
back:

Error in names(x) <- value :
  'names' attribute must be the same length as the vector


Then when I use traceback(), R gives me back this in return:

`colnames<-`(`*tmp*`, value = c(""Item", "Color" ,"Number", "Size"))



I'm not exactly sure how to fix this problem.  Any advice would be greatly
appreciated!

Thanks,
Priya


MODIFIED CODE:
# Looping through a series of CSV files
for (c in csvfiles)
{
  #A DF (prevdf) was created based on an initial csv file..
  #so the condition below states that if there are rows with NAs or the
number of rows in prevdf is zero
  if( (apply(prevdf, 1, function(y) !sum(!is.na(y))==1) > 0) ||
(nrow(prevdf) == 0) )
  {
    #Open a new file
    currentCSVFile <- read.csv(c, header=TRUE)
    #pick only the few columns we want from the file
    currentCSVFile <- data.frame(currentCSVFile$Item,
currentCSVFile$Color..type , currentCSVFile$Number..owned,
currentCSVFile$Size..shirt)
    #rename the column names
    colnames(currentCSVFile) <- c("Item", "Color" ,"Number", "Size")

    #find the rows in prevdf that do not have any values. (sum should be 1
because the Item name is unique for every row)
    NArows <- prevdf[apply(prevdf, 1, function(y) sum(!is.na(y))==1),]

    #if NAs rows is not equal to zero
    if (nrow(NArows) != 0 )
    {
      #find the rows in the current CSV file where there is missing data in
prevdf (this info is in NArows)
      intersectItem<- intersect(currentCSVFile$Item, NArows$Item)

      #initiate another data frame to put the data in
      newdf.int <- data.frame(Item=c(), Color=c(), Number=c(), Size=c())


      print(nrow(currentCSVFile))
      for (i in 1:nrow(currentCSVFile))

      {
        print("In loop") # check for me
        row <- currentCSVFile[i,]

        if (row$Item %in% intersectItem){  # this is where the code stops
and throws back error
          .
          .
          .
           # do stuff to fill vectors named Item, Color, Number and Size
          .
          .
          .

          newdf.int <-rbind(newdf.int, c(Item, Color, Number, Size)
        }

        colnames(newdf.int) <- c("Item", "Color", "Number", "Size")
        prevdf <- merge(newdf.int, prevdf, by=c("Item", "Color", "Number",
"Size"), all=TRUE)
        prevdf <- prevdf[apply(prevdf, 1, function(y) !sum(!is.na(y))==1),]
        print("after removing row = 1")


      } # end of for loop

    } # end of NA rows condition

  } # end of main if statement

  else
  {
    break
  }


}

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to