2013-12-12 3 views
0

Я пытаюсь создать список, который будет меняться и быть взаимозаменяемым для разных целей. Я хочу, чтобы это было в картине:Создать список в R для имен столбцов

P1A1 P1A2 P1A3 P1A4 P1A5 P1A6 
P2A1 P2A2 P2A3 P2A4 P2A5 P2A6 
P3A1 P3A2 P3A3 P3A4 P3A5 P3A6 

Где P идет от 1 до num.Patches и А идет от 1 до num.allele. Таким образом, для приведенного выше примера, num.Patches = 3 и num.alleles = 6

Я пытаюсь использовать цикл:

pdum <- matrix(data=NA,nrow=1,ncol=num.Patches) 
Adum <- matrix(data=NA,nrow=1,ncol=num.allele*num.Patches+1) 
key2 <- matrix(data=NA,nrow=1,ncol=num.allele*num.Patches+1) 

for (i in 1:num.Patches) pdum[1,i] <- matrix(paste("P",i,sep="")) 
pdum2 <- as.character(pdum) 

for (k in 1:num.Patches){ 
    for (i in pdum2) { 
    for (j in 1:num.allele){ 
    Adum[1,k+num.allele*(1-j)] <- matrix(paste(i,"A",j,sep="")) 
    } 
    } 
} 

Линия, у меня возникли проблемы с является:

Adum[1,k+num.allele*(1-j)] <- matrix(paste(i,"A",j,sep="")) 

Я не знаю, как ссылаться на каждую запись матрицы Adum и заполнять ее конкретным значением. Конечной целью этого является создание списка для использования в качестве имен столбцов более крупной матрицы, чтобы можно было легко ссылаться.

спасибо.

ответ

2

Чтобы получить все комбинации 1: num.Patches и 1: num.alleles, а затем объединить, можно попробовать:

combinations <- expand.grid(1:num.Patches, 1:num.alleles) 
names <- paste0("P", combinations[,1], "A", combinations[,2]) 

Это даст вам шаблоны, которые вы хотели (как вектор). Вы можете позже установить их как имена столбцов какой-либо созданной вами матрицы.

+0

@ josilber Спасибо очень много. Это именно то, что мне нужно. Я не знал, что есть функция комбинаций. – Coho13

2

Вы ищете outer:

num.Patches <- 3 
num.alleles <- 6 

mm <- outer(seq(num.Patches), seq(num.alleles), 
      function(x,y)paste0('P',x,'A',y)) 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] "P1A1" "P1A2" "P1A3" "P1A4" "P1A5" "P1A6" 
[2,] "P2A1" "P2A2" "P2A3" "P2A4" "P2A5" "P2A6" 
[3,] "P3A1" "P3A2" "P3A3" "P3A4" "P3A5" "P3A6" 

Если вы хотите, чтобы получить вектор имен:

as.vector(mm) 
Смежные вопросы