создание итерационных именованных списков с именами переменных, в том числе с операторами

РЕШЕНО

pheno_vector = c("PAX5+PDL1-", "CD3+CD8+PD1-", "CD3+CD8-PD1+")
n = length(pheno_vector)
for (i in 1:(n-1)){
  for (j in (i+1):n){
    pheno1 = pheno_vector[i]
    pheno2 = pheno_vector[j]
    pairs = list(c(pheno1, pheno2))

    colors = c("cyan", "magenta")
    names(colors) = c(pheno1,pheno2)
    print(colors)

производит

               PAX5+PDL1- CD3+CD8+PD1- 
                "cyan"    "magenta" 
               PAX5+PDL1- CD3+CD8-PD1+ 
                "cyan"    "magenta" 
             CD3+CD8+PD1- CD3+CD8-PD1+ 
                "cyan"    "magenta"

У меня проблема с созданием именованного списка, в котором имена должны иметь возможность итеративно изменяться, но должны быть вставлены для визуального построения.

Я работаю с данными Vectra Imaging, включая фенотипы клеток.

Поскольку существует несколько фенотипов, я хочу итеративно создавать пары фенотипов для визуального построения графиков, как показано в примере в https://rdrr.io/github/PerkinElmer/phenoptr/man/spatial_distribution_report.html

В настоящее время мой код, адаптированный к моим данным, выглядит так

pheno1 = "PAX5+PDL1-"
pheno2 = "CD3+CD8+PD1-"
pairs = list(c("PAX5+PDL1-", "CD3+CD8+PD1-"))
colors = c('PAX5+PDL1-'="cyan", 'CD3+CD8+PD1-'="magenta")
colors

Это возвращает

>  PAX5+PDL1- CD3+CD8+PD1- 
>     "cyan"    "magenta" 

Пары и цвета используются для построения графиков. Теперь я хочу итеративно построить графики для большего количества пар фенотипов, которые у меня есть в данных. В конце концов, я хотел бы выполнить цикл for для фено1 и цикл для фено2, полученный из общего фенотипического вектора фенотипа, который содержит .

Я пробовал

pheno1 = "PAX5+PDL1-"
pheno2 = "CD3+CD8+PD1-"
pairs = list(c(pheno1, pheno2))
colors = c(pheno1="cyan", pheno2="magenta")
colors

Что возвращает

>     pheno1     pheno2 
>     "cyan"    "magenta" 

Я понимаю, почему я вижу фено1 и фено2, а не "PAX5+PDL1-" и "CD3+CD8+PD1-". Я пробовал некоторые методы вставки и оценки, как в Создайте имя переменной с вставкой в R? но это не сработало.

Assign("PAX5+PDL1-", "cyan")

не получается, так как я не знаю, как сделать это в именованном списке.

В конце концов, я хотел бы иметь это в результате

pheno_vector = c("PAX5+PDL1-", "CD3+CD8+PD1-", "CD3+CD8-PD1+")
for (pheno1 in pheno_vector){
 for (pheno2 in pheno_vector){
  if (uniqueness_statement and permutation_statement){
     pairs = list(c(pheno1, pheno2))
     colors = c(pheno1="cyan", pheno2="magenta")
     colors

Который должен вернуться

>     PAX5+PDL1-     CD3+CD8+PD1- 
>     "cyan"             "magenta" 
>     PAX5+PDL1-     CD3+CD8-PD1+ 
>     "cyan"              "magenta" 
>     CD3+CD8+PD1-   CD3+CD8-PD1+
>     "cyan"           "magenta" 

Итак, это списки со специальными именами, которыми они должны быть для последующего построения.

У кого-нибудь есть решение для этого?


person Bo5man    schedule 14.05.2019    source источник


Ответы (1)


Вы можете назвать colors-вектор после его создания:

library(gtools)

pheno_perms <- permutations(length(pheno_vector), 2, pheno_vector)
combs <- apply(apply(pheno_perms, 1, sort), 2, paste0, collapse=' ')
pheno_perms <- pheno_perms[match(unique(combs), combs), ]

for (i in 1:nrow(pheno_perms)){
  pheno1 <- pheno_perms[i, 1]
  pheno2 <- pheno_perms[i, 2]
  pairs = list(c(pheno1, pheno2))
  colors = c("cyan", "magenta")
  names(colors) <- c(pheno1, pheno2)
  print(colors)
}

Это производит:

CD3+CD8-PD1+ CD3+CD8+PD1- 
      "cyan"    "magenta" 
CD3+CD8-PD1+   PAX5+PDL1- 
      "cyan"    "magenta" 
CD3+CD8+PD1-   PAX5+PDL1- 
      "cyan"    "magenta" 

P.S.: Надеюсь, я правильно понял, что вы имеете в виду под uniqueness_statement и permutation_statement!

person Simon    schedule 14.05.2019
comment
Благодарю за ваш ответ. Кажется, я неправильно понял синтаксис имен (цветов). Теперь это исправлено, смотрите мое редактирование. Заявление о перестановке и уникальности не было важным, но хотело указать, почему на выходе было 3 элемента. - person Bo5man; 15.05.2019