创建带有变量名(包括运算符)的迭代命名列表

时间:2019-05-14 10:21:22

标签: r string list assign names

已解决

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" 

使用对和颜色进行绘制。现在,我想迭代地为数据中的更多表型对绘制图。最后,我想对pheno1进行循环,对pheno2进行循环,该pheno2是从包含的一般表型向量pheno_vector获得的。

我尝试过的是

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

返回哪个

>     pheno1     pheno2 
>     "cyan"    "magenta" 

我了解为什么看到pheno1和pheno2,而不看到“ PAX5 + PDL1-”和“ CD3 + CD8 + PD1-”。 我尝试了一些Create a variable name with "paste" in 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" 

因此,这些是专门命名的列表,它们需要在以后绘制时使用。

有人对此有解决方案吗?

1 个答案:

答案 0 :(得分:0)

创建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_statementpermutation_statement的意思!