2012-10-10 12 views
13
Birkaç durumlarda gördük

o read.table() (örneğin bir mikrodizilimin açıklama tablosunu) bir sekme ayrılmış dosya okuyabilecek aşağıdaki hatayı dönen değilken:Read.csv vs read.table

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : 
line xxx did not have yyy elements 

read.csv(), aynı dosya üzerinde hatasız şekilde mükemmel çalışır. Ayrıca read.csv()'un hızının da read.table()'dan daha yüksek olduğunu düşünüyorum.

Daha da çok: read.table() çok çılgın bir dosya okumayı yapıyor. Satırı 100 okurken bu hatayı yapar, ancak aynı dosyanın başından hemen sonra 90 - 110 satırlarını kopyalayıp yapıştırdığımda, hala satır 100 + 21 (başlangıçta kopyalanan yeni satırlar) hatası yapar. Bu satırla ilgili bir sorun varsa, neden yapıştırılan satırı en baştan okurken bu hatayı rapor etmiyor? read.csv()'un aynı dosyayı hata olmadan okuduğunu onaylıyorum.

read.table() neden read.csv() üzerinde çalıştığı aynı dosyaları okuyamayan bir fikriniz var mı? Ayrıca herhangi bir durumda read.table() kullanmak için herhangi bir sebep var mı? read.table civarında oldukça ince bir sarıcıdır;

+1

Ayrıca okumak Tablonuzdaki hiçbir boşluk öğesi varsayarak yardımcı olabilir Büyük dosyalar için neden yavaş görünebileceğine dair bellek kullanımı altında read.table() için yardım sayfası. – Chase

+1

tekrarlanabilir bir örnek olmadan (güncellenmiş) sorunuza cevap veremiyoruz. En yaygın okuma problemleri (1) tespit edilmemiş yorum karakterleri, (2) eşsiz tırnak işaretleri, (3) 'doluluk = DOĞRU' olduğunda dosyanın ilk 5 satırından sonra satır başına alanların sayısı değişir. Read.csv' ve 'read.table'' 'comment',' quote' ve 'fill' için farklı varsayılan değerlere sahip olduğundan, bunlardan herhangi biri problem olabilir. –

+1

PS, 'comment' /' quote'/'fill' seçeneğinin 8 kombinasyonu vardır: hepsini deneyebilir ve sonuçların nasıl farklılaştığını görebilirdiniz - bu da size cevabı verebilir. count.fields() 'da teşhis için kullanışlıdır. –

cevap

26

read.csv; davranışını, read.table'a doğru argümanları sağlayarak tam olarak yineleyemediyseniz, çok şaşırırım. Bununla birlikte, bu argümanlardan bazıları (tırnak işaretleri veya yorum karakterleri gibi) işin hızını ve davranışını iyi bir şekilde değiştirebilir. belirtildiği gibi

function (file, header = TRUE, sep = ",", quote = "\"", dec = ".", 
    fill = TRUE, comment.char = "", ...) { 
    read.table(file = file, header = header, sep = sep, quote = quote, 
     dec = dec, fill = fill, comment.char = comment.char, ...) 
} 

yani sadece read.table seçenek belirli bir dizi ile açıklanmıştır:

Özellikle

, bu read.csv ait tam tanımıdır. @Chase aşağıdaki yorum belirttiği gibi

, read.table() için yardım sayfası tıpkı Details altında diyor ki:

read.csv and read.csv2 are identical to read.table except for the defaults. They are intended for reading ‘comma separated value’ files (‘.csv’) or (read.csv2) the variant used in countries that use a comma as decimal point and a semicolon as field separator.

+6

İyi cevap - Sadece read.table()' için yardım sayfasının "read.csv" ve read.csv2 'nin read.table' ın aynısı olduğunu söylüyor. varsayılanlar. Ondalık virgül kullanan virgül kullanan ve alan ayırıcı olarak noktalı virgül kullanan ülkelerde kullanılan 'virgülle ayrılmış değer' (‘.csv’) veya (read.csv2) dosyalarını okumak için tasarlanmıştır. OP-evet'e göre, verileriniz read.csv' – Chase

+0

için varsayılan değerlerle eşleşmediğinde read.table' istemini isteyebilirsiniz. – Ali

8

read.delim kullanın sekme ile sınırlandırılmış dosyaları okumak için read.table kullanmayın. (Bu read.table etrafında sadece ince bir sarıcı ama uygun değerlere seçenekleri ayarlar)

0

read_table() bazen ed dosyası' sekmesine sep başarısız yapar ve sep='\s+' ayarı