在列表中的嵌套列表中用空格替换空列

时间:2016-03-31 14:07:59

标签: r list na

我使用两个函数(下面)在列表中生成了10个嵌套列表 - 由称为normalised_scores的虚拟数据生成。每个嵌套列表都包含两个名为PredictedActual的空列(下面的代码)。我想用NA替换这些空列。我尝试使用函数(Shuffle100)实现此目的但得到error messages (below)。在网上浏览了很长时间之后,除了使用冗长的代码(下面)之外,我找不到有效的方法。如果有人可以提供帮助,那么谢谢你。

虚拟数据

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

我在下面编写了这个函数,使用rpartcaret包从分类树模型中生成这10个嵌套列表。我尝试使用此函数生成两个填充Predicted的列(ActualNA's),但没有成功。

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

生成两个名为Predicted和Actual

的空列
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(""))
})

来自函数Shuffle100的错误消息及其大部分内容(列表1-10):

               [[1]]
                [1] NA

               [[2]]
                [1] NA

               [[3]]
                [1] NA

有更有效的方法吗?

          #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

2 个答案:

答案 0 :(得分:2)

使用dplyr的mutate函数,尝试

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

答案 1 :(得分:0)

我们可以使用transform

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