2012-07-03 4 views
4

R에서는 약 42,900 행의 기본 CSV 파일을 읽으려고합니다 (Unix의 wc -l에 의해 확인 됨). 관련 코드는R의 read.csv()는 행을 생략합니다

vecs <- read.csv("feature_vectors.txt", header=FALSE, nrows=50000) 

입니다. 여기서 nrows는 약간 과대 평가됩니다. 그러나,

>> dim(vecs) 
[1] 16853  5 

을 나타내며, 결과 데이터 프레임은 17,000 행 정도를 나타냅니다. 이것이 메모리 문제입니까? 각 행은 ~ 30 자의 해시 코드, ~ 30 자의 문자열 및 3 개의 정수로 구성되므로 파일의 총 크기는 약 4MB에 불과합니다.

관련성이있는 경우 많은 행에 입력란이 누락되어 있음을 유의해야합니다.

도움 주셔서 감사합니다.

+0

* 가져온 * 행을 올바르게 가져 왔는지 확인 했습니까? – blahdiblah

+5

내 생각 엔 당신이 불일치한'''을 삽입했다는 것입니다. 그래서 여러분의 행 중 일부는 실제로는 훨씬 길어집니다.'apply (vecs, 2, function (x), max (nchar (as .character (x)))'확인하는 것. – Justin

+0

예스! 저스틴이 얻었습니다. 'quote = ""'문제가 수정되었습니다. – Cardano

답변

4

이 종류의 문제는 count.fields을 사용하여 쉽게 해결할 수 있습니다. 이는 read.csv을 호출 한 경우 결과 데이터 프레임의 열 수를 알려줍니다.

(n_fields <- count.fields("feature_vectors.txt")) 

n_fields의 값이 모두 동일하지 않으면 문제가있는 것입니다. 당신이 기대하는 것과 다른 n_fields 값의 경우 모양에

if(any(diff(n_fields))) 
{ 
    warning("There's a problem with the file") 
} 

: 문제는 이러한 행에서 발생합니다.

저스틴 (Justin)이 언급했듯이 일반적인 문제는 따로 따옴표입니다. CSV 파일을 열어 문자열이 어떻게 인용되는지 알아보십시오. 그런 다음 quote 인수를 지정하여 read.csv으로 전화하십시오.

3

내 생각에 당신은 끼어들 수없는 "입니다. 따라서 일부 행은 실제로는 훨씬 길어집니다. 확인하려면 apply(vecs, 2, function(x), max(nchar(as.character(x)))과 같은 것을 할 것입니다.