0

文字列の名前付きリストがあります:

str(nr.genes)
 Named chr [1:37] "0" "0" "Pipas_c034_0013" "Pipas_chr1-4_0040" ...
 - attr(*, "names")= chr [1:37] "Nr11" "Nr12" "Nr131" "Nr132" ...

1 対 1 ではなく、次のオブジェクトの文字列名を文字列名に置き換えたい:

str(nr.genes.names)
 chr [1:16] "up.p33-dw.p33" "up.p33-dw.p38" "up.p33-dw.p52" ...

私はこのようなものが欲しいです:

 str(nr.genes)
 Named chr [1:37] "0" "0" "Pipas_c034_0013" "Pipas_chr1-4_0040" ...
 - attr(*, "names")= chr [1:37] "up.p33-dw.p33" "up.p33-dw.p38" "up.p33-dw.p52" "up.p33-dw.p52" ...

手動で変更した場所

"Nr11"<-"up.p33-dw.p33"
"Nr12"<-"up.p33-dw.p38"
"Nr131"<-"up.p33-dw.p52"
"Nr132"<-"up.p33-dw.p52" #Note that the third digit doesn't matter
       .
       . 
       .

最初の 2 桁に応じて、各文字列の名前を 2 番目の list の要素に置き換える必要があります。私はlapply関数を試しましたが、うまくいきませんでした.またsub、置換を含む関数を作成しようとしましたが、何の変化も見られませんでした.以下のコードは次のとおりです.

lfun <- function(x,y) {
  for(o in 1:16){ #Length of the names to substitue for
    for (p in 1:4){ 
      for (q in 1:4){
       x[sub(paste("Nr", p, q, sep=""), x[o], replacement=y[o])]
      }
    }
  }
}

この関数を使用して、最初の引数の属性のすべての名前を取得し、それが意味する要素に置き換えようとします。しかし、警告やエラーメッセージなしで以前と同じものを返します。それを行う簡単な方法があるに違いないと確信していますが、正しい方法が見つかりません


編集: nr.genes は次のように作成できます。

nr.genes <- c("0", "0", "Pipas_c034_0013", "Pipas_chr1-4_0040")
attr(nr.genes, "names") <-c("Nr11", "Nr12", "Nr131", "Nr132")

遺伝子。名前

nr.genes.names <- c("up.p33-dw.p33", "up.p33-dw.p38", "up.p33-dw.p52")

マッチングについては、それが必要ですNr11 <-"up.p33-dw.p33"Nr21<-"<nr.genes.names[5]>"、その後Nr22<-"<nr.genes.names[6]>",Nr23<-"<nr.genes.names[7]>"Nr24<-""、その後Nr31 <-"<nr.genes.names[9]>"

4

1 に答える 1

2

gsubたとえば、nr.genes 名から 2 番目の番号を抽出し、nr.genes.names のインデックスとして使用できます。

new <- c("up.p33-dw.p33","up.p33-dw.p38", "up.p33-dw.p52")
old <- c("Nr11" ,"Nr12", "Nr131", "Nr132" )

old <- new[as.integer(gsub('^Nr[0-9]([0-9]).*','\\1',old))]

[1] "up.p33-dw.p33" "up.p33-dw.p38" "up.p33-dw.p52" "up.p33-dw.p52"

編集

一致するルールが明確ではありません。おそらく、ルールはなく、一致するアイテムが 16 個しかありません。この場合merge、遺伝子とその名前を照合するために使用できます。

たとえば、以下の dat.match data.frame のように、各遺伝子の抽出一致をリストする data.frame を作成できます。ここでletters[1:16]は、16 個の nr.genes.names を記号化するために使用します。

dd <- expand.grid(1:4,1:4)
dat.match <- data.frame(nr = paste0('Nr',mapply(paste0,dd[,1],dd[,2])),
                       gene =letters[seq_len(16)])

   nr gene
1  Nr11    a
2  Nr21    b
3  Nr31    c
4  Nr41    d
5  Nr12    e
6  Nr22    f
7  Nr32    g
8  Nr42    h
9  Nr13    i
10 Nr23    j
11 Nr33    k
12 Nr43    l
13 Nr14    m
14 Nr24    n
15 Nr34    o
16 Nr44    p

merge次に、次のように使用できます。

nr.genes <-c("Nr11", "Nr12", "Nr131", "Nr132")
genes <- data.frame(nr=gsub('(^Nr[0-9]{2}).*','\\1',nr.genes))
merge(genes,dat.match)

  nr gene
1 Nr11    a
2 Nr12    e
3 Nr13    i
4 Nr13    i
于 2013-10-25T10:26:15.527 に答える