2012-02-10 15 views
7

Ho un oggetto ExpressionSet con 100 campioni:sottoinsiemi da campioni per un oggetto ExpressionSet

> length(sampleNames(eset1)) 
100 

Ho anche un vettore dei nomi di 75 campioni (non i dati stessi):

> length(vecOf75) 
75 

Come è possibile impostare sottoinsieme eset1 (e salvarlo) in base ai 75 nomi di esempio? Cioè, voglio ignorare questi campioni in eset1 i cui nomi non sono elencati in vecOf75. Tenere presente che alcuni dei campioni corrispondenti ai 75 nomi di campioni potrebbero non essere in eset1. Così,

> length(sampleNames(eset1)) 

ora dovrebbe dare qualcosa < 75.

risposta

6

Un ExpressionSet può essere sottoinsieme come una matrice, quindi forse

eset2 = eset1[, sampleNames(eset1) %in% vecOf75] 

o se all(vecOf75 %in% sampleNames(eset1)) poi basta

eset1[, vecOf75] 

Non so cosa 'salvare' mezzi; salvare (eset2, "some_file.rda") o estrarre i componenti exprs(eset2), pData(eset2) ecc. e utilizzare write.table e altre funzioni R standard.

+0

Con 'save', intendevo aggiornare 'eset1' con il suo sottoinsieme piuttosto che creare un nuovo Oggetto RData come 'eset2'. Grazie. – user1202664

2

eset1 <- vecOf75[vecOf75 %in% eset1] Questo dice, salvo a quelli di eset1 vecOf75 dove vecOf75 è in eset1

Un esempio banale utilizzando i numeri:

eset1 <- sample(1:100) 
vecOf75 <- sample(1:200,75) 
eset1 <- vecOf75[vecOf75 %in% eset1] 

In alternativa, è possibile utilizzare subset() ma, abituarsi al subsetting tramite ']' è molto più utile a livello di programmazione.

+0

Questo non funzionerà con gli oggetti ExpressionSet (pacchetto Bioconductor). – user1202664

+0

Se guardi l'oggetto in profondità 'str (obj)', sono sicuro che puoi trovare dove sono memorizzati i nomi dei personaggi e regolare il codice sopra con alcuni vecof75 [vecOf75 $ spazio di archiviazione% in% eset1 $ spazio di archiviazione] o qualcosa di quella natura. –

+0

Inoltre, 'vecOf75' contiene solo i nomi delle colonne (o dei campioni per un oggetto ExpressionSet). Non contiene i dati effettivi. – user1202664