2016-03-31 10 views
1

Ich habe 10 verschachtelte Listen in Listen mit zwei Funktionen (unten) produziert - produziert von Dummy-Daten mit der Bezeichnung normalised_scores. Jede verschachtelte Liste enthält zwei leere Spalten mit den Namen und Actual (Code unten). Ich möchte diese leeren Spalten durch NAs ersetzen. Ich habe versucht, dies mit einer Funktion zu erreichen (Shuffle100), aber error messages (below) bekommen. Nachdem ich lange online geschaut habe, kann ich keine effiziente Methode finden, abgesehen von langatmigem Code (unten). Wenn jemand helfen kann, dann danke.Ersetzen Sie leere Spalten mit NA's in verschachtelten Listen innerhalb von Listen

Dummy-Daten

Family=rep(c("G8", "V4"), each=40) 
    x <- matrix(rnorm(960), ncol=12) 
    normalised_scores <- cbind(Family, x) 
    colnames(my_data)<-c("Family", 
         "Swimming", 
         "Not.Swimming", 
         "Running", 
         "Not.Running", 
         "Fighting", 
         "Not.Fighting", 
         "Resting", 
         "Not.Resting", 
         "Hunting", 
         "Not.Hunting", 
         "Grooming", 
         "Not.Grooming") 

Ich schrieb diese Funktion unter diesen 10 verschachtelten Listen von Klassifikationsbaum-Modellen mit rpart und caret Paketen zu erzeugen. Ich habe versucht, zwei Spalten (und Actual) mit NA's gefüllt mit dieser Funktion, aber ohne Erfolg.

library(caret) 
library(e1071) 
library(rpart) 

shuffle100 <-lapply(seq(10), function(n){ #Select the production of 10 dataframes 
subset <- normalised_scores[sample(nrow(normalised_scores), 80),] #Shuffle rows 
subset_idx <- sample(1:nrow(subset), replace = FALSE) 
subset <- subset[subset_idx, ] #training subset 
subset1<-subset[-subset_idx, ] #test subset 
subset_resampled_idx <- createDataPartition(subset_idx, times = 1, p = 0.7, list = FALSE) #70 % training set  
subset_resampled <- subset[subset_resampled_idx, ] 
ct_mod<-rpart(Family~., data=subset_resampled, method="class", control=rpart.control(cp=0.005)) #10 ct 
ct_pred<-predict(ct_mod, newdata=subset[, 2:13]) 
ct_dataframe=as.data.frame(ct_pred) #create new data frame 
ct_dataframe$Predicted=NA 
ct_dataframe$Actual=NA 
}) 

Produce zwei leere Spalten vorhergesagte und tatsächliche genannt

my_list <- lapply(shuffle100, function(df){#Create two new columns Predicted and Actual 
      if (nrow(df) > 0) 
      cbind(df, Predicted = c(""), Actual = c("")) 
      else 
      cbind(df, Predicted = character(), Actual = c("")) 
}) 

Fehlermeldungen der Funktion Shuffle100 und viel von den gleichen (Listen 1-10):

   [[1]] 
       [1] NA 

       [[2]] 
       [1] NA 

       [[3]] 
       [1] NA 

Gibt es ein effizienterer Weg dies zu tun?

  #Insert NA's 

      my_list[[1]]$Predicted<-NA 
      my_list[[1]]$Actual<-NA 

      my_list[[2]]$Predicted<-NA 
      my_list[[2]]$Actual<-NA 

      my_list[[3]]$Predicted<-NA 
      my_list[[3]]$Actual<-NA 

      my_list[[4]]$Predicted<-NA 
      my_list[[4]]$Actual<-NA 

      my_list[[5]]$Predicted<-NA 
      my_list[[5]]$Actual<-NA 

      my_list[[6]]$Predicted<-NA 
      my_list[[6]]$Actual<-NA 

      my_list[[7]]$Predicted<-NA 
      my_list[[7]]$Actual<-NA 

      my_list[[8]]$Predicted<-NA 
      my_list[[8]]$Actual<-NA 

      my_list[[9]]$Predicted<-NA 
      my_list[[9]]$Actual<-NA 

      my_list[[10]]$Predicted<-NA 
      my_list[[10]]$Actual<-NA 

Antwort

0

Wir können transform

lapply(my_list, transform, Predicted=NA, Actual=NA) 
2

dplyr des mutieren Funktion verwenden, versuchen

library(dplyr) 
    lapply(my_list, function(x) mutate(x, Predicted = NA, Actual = NA) 
+0

Thank you so much. Ich habe das den ganzen Tag versucht. Hab eine großartige Woche. –

+1

Wofür wird 'dplyr' verwendet? Kannst du 'transform' nicht von Base R anstatt' muate' benutzen? –

+0

sicher! Ich arbeite gerade mit dplyr so sehr, dass ich manchmal die Basisfunktionen vergesse .. – denise