动态名称数据框R for循环

时间:2020-02-15 18:41:50

标签: r dataframe for-loop

我正在尝试产生16个数据帧,每个数据帧具有16种不同蛋白质的名称,我尝试的代码不起作用

for (i in seq(1,len_TSPAN)){
  temp_TSPAN <- TSPANS$V1[i]
  print(temp_TSPAN)
  paste(temp_TSPAN) <- data.frame(Lum_A_Q1_means = rep(NA, 67), Lum_A_Q2_means = rep(NA,67),
                            Lum_A_Q3_means = rep(NA, 67), Lum_A_Q4_means = rep(NA,67),
                            Lum_B_Q1_means = rep(NA, 67), Lum_B_Q2_means = rep(NA,67),
                            Lum_B_Q3_means = rep(NA, 67), Lum_B_Q4_means = rep(NA,67),
                            Her_2_Q1_means = rep(NA, 67), Her_2_Q2_means = rep(NA,67),
                            Her_2_Q3_means = rep(NA, 67), Her_2_Q4_means = rep(NA,67),
                            Basal_Q1_means = rep(NA, 67), Basal_Q2_means = rep(NA,67),
                            Basal_Q3_means = rep(NA, 67), Basal_Q4_means = rep(NA,67),
                            Normal_Q1_means = rep(NA, 67), Normal_Q2_means = rep(NA,67),
                            Normal_Q3_means = rep(NA, 67), Normal_Q4_means = rep(NA,67))
}

2 个答案:

答案 0 :(得分:1)

如果我们要在全局环境中创建多个对象(虽然不推荐),则应将paste上的

<-替换为assign

for (i in seq(1,len_TSPAN)){
  temp_TSPAN <- TSPANS$V1[i]
    print(temp_TSPAN)
    assign(as.character(temp_TSPAN), value = data.frame(Lum_A_Q1_means = rep(NA, 67), Lum_A_Q2_means = rep(NA,67),
                            Lum_A_Q3_means = rep(NA, 67), Lum_A_Q4_means = rep(NA,67),
                            Lum_B_Q1_means = rep(NA, 67), Lum_B_Q2_means = rep(NA,67),
                            Lum_B_Q3_means = rep(NA, 67), Lum_B_Q4_means = rep(NA,67),
                            Her_2_Q1_means = rep(NA, 67), Her_2_Q2_means = rep(NA,67),
                            Her_2_Q3_means = rep(NA, 67), Her_2_Q4_means = rep(NA,67),
                            Basal_Q1_means = rep(NA, 67), Basal_Q2_means = rep(NA,67),
                            Basal_Q3_means = rep(NA, 67), Basal_Q4_means = rep(NA,67),
                            Normal_Q1_means = rep(NA, 67), Normal_Q2_means = rep(NA,67),
                            Normal_Q3_means = rep(NA, 67), Normal_Q4_means = rep(NA,67))
                            )
}

似乎我们在每个循环中都创建了相同的“ data.frame”对象。使用replicate并存储在list

中可能会更容易
lst1 <- replicate(len_TSPAN), 
           data.frame(Lum_A_Q1_means = rep(NA, 67), Lum_A_Q2_means = rep(NA,67),
                            Lum_A_Q3_means = rep(NA, 67), Lum_A_Q4_means = rep(NA,67),
                            Lum_B_Q1_means = rep(NA, 67), Lum_B_Q2_means = rep(NA,67),
                            Lum_B_Q3_means = rep(NA, 67), Lum_B_Q4_means = rep(NA,67),
                            Her_2_Q1_means = rep(NA, 67), Her_2_Q2_means = rep(NA,67),
                            Her_2_Q3_means = rep(NA, 67), Her_2_Q4_means = rep(NA,67),
                            Basal_Q1_means = rep(NA, 67), Basal_Q2_means = rep(NA,67),
                            Basal_Q3_means = rep(NA, 67), Basal_Q4_means = rep(NA,67),
                            Normal_Q1_means = rep(NA, 67), Normal_Q2_means = rep(NA,67),
                            Normal_Q3_means = rep(NA, 67), Normal_Q4_means = rep(NA,67)), simplify = FALSE)

答案 1 :(得分:0)

这是另一个解决方案,可以从循环中解决。请注意,我已经制作了一个dataframe用于说明

TSPANS <- data.frame(V1 = letters[1:12])

myList <- list()

for (i in seq(1,12)){
  temp_TSPAN <- TSPANS$V1[i]
  print(temp_TSPAN)
  x <- data.frame(Lum_A_Q1_means = rep(NA, 67), Lum_A_Q2_means = rep(NA,67),
                                  Lum_A_Q3_means = rep(NA, 67), Lum_A_Q4_means = rep(NA,67),
                                  Lum_B_Q1_means = rep(NA, 67), Lum_B_Q2_means = rep(NA,67),
                                  Lum_B_Q3_means = rep(NA, 67), Lum_B_Q4_means = rep(NA,67),
                                  Her_2_Q1_means = rep(NA, 67), Her_2_Q2_means = rep(NA,67),
                                  Her_2_Q3_means = rep(NA, 67), Her_2_Q4_means = rep(NA,67),
                                  Basal_Q1_means = rep(NA, 67), Basal_Q2_means = rep(NA,67),
                                  Basal_Q3_means = rep(NA, 67), Basal_Q4_means = rep(NA,67),
                                  Normal_Q1_means = rep(NA, 67), Normal_Q2_means = rep(NA,67),
                                  Normal_Q3_means = rep(NA, 67), Normal_Q4_means = rep(NA,67), temp_TSPAN = temp_TSPAN)
  myList[[temp_TSPAN]] <- x
}
# I have added a column named, temp_TSPAN, with name of temp_TSPAN  in it. This is because converting the list to a dataframe, as below, will put everything into one. 


library(tidyverse)

# You may use this dataframe to subset for your temp_TSPAN variable. Its better to have them in one, them lots of separate dataframes.
df <- bind_rows(myList)