2012-01-31 22 views
23

Benzer şekilde bir dizi dosyayı toplu olarak analiz etmek için R'de bir işlev yazmaya çalışıyorum. Dosyalar sınıf ExpressionSetIllumina'dur. Ben dizindeki tüm dosyaların isimlerini içeren bir karakter (string) vektörü yapmak ve bunların her yükleyebilirsiniz:Aynı ada sahip karakter değişkeni olan bir nesneyi nasıl çağırırsınız?

list = list.files() 
for (i in list[1]) {  
    load(i) 
} 

Bu ne şimdi yapmak istiyorum kullanmak doğru

> ls() 
[1] "i"     "list"     "SSD.BA.vsn" 
> class(SSD.BA.vsn) 
[1] "ExpressionSetIllumina" 
attr(,"package") 
[1] "beadarray" 

olan dosyaları yükler

>data = SomeFunction(i) 
>class(data) 
[1] "ExpressionSetIllumina" 
attr(,"package") 
[1] "beadarray" 

Ama şimdiye kadar sadece getiri denedim ne olursa olsun: böylece i (karakter dizesi "SSD.BA.vsn") yeni bir nesne verilerine nesneyi SSD.BA.vsn atamak Benimle aynı değere sahip bir karakter vektörü olarak verileri veya hiç çalışmaz. Bu yüzden benim için yapacak bir işlev var mı yoksa başka bir yoldan gitmem mi gerekip gerekmediğini merak ediyorum.

Bir karakter vektöründe bir dize olarak saklanan bir nesnenin veya değişkenin adına sahibim. Nesne bir şey yapmak için dize nesne adını nasıl kullanabilirim?

cevap

31

Bence get. Eğer get (ve onun muadili assign) kullanmaya başladığınızda, söz konusu

data <- get(i) 

, genellikle korkunç okunamayan kodla sonunda.

Sizinki gibi toplu analizler için, tüm verilerinizi veri çerçeveleri listesine okumak, ardından liberal kullanımı lapply yapmak genellikle daha iyidir. gibi bir şey:

data_files <- list.files() 
all_vars <- lapply(data_files, function(file) 
{ 
    vars_loaded <- load(file) 
    mget(vars_loaded, parent.frame()) 
}) 

mget Aynı anda birden fazla değişken alır get sürümüdür. Burada, yükleme çağrısı tarafından yüklenen tüm şeyleri almak için kullanılır.

Şimdi bir liste listesi var: üst düzey liste dosyayla ilgili, daha düşük düzeyli listeler bu dosyadan yüklenen değişkenleri içerir.

+0

Sadece neye ihtiyaç vardı. Teşekkür ederim! Ancak, kod okunabilirliği ile ilgili önerinizi aklımda tutacağım. – Ophiothrix

İlgili konular