read.csv সতর্কতা 'উদ্ধৃত স্ট্রিংয়ের মধ্যে EOF' ফাইলের সম্পূর্ণ পড়া বাধা দেয়


125

আমার কাছে একটি সিএসভি ফাইল (24.1 এমবি) রয়েছে যা আমি আমার আর সেশনে পুরোপুরি পড়তে পারি না। আমি যখন স্প্রেডশিট প্রোগ্রামে ফাইলটি খুলি তখন আমি 112,544 সারি দেখতে পাচ্ছি। আমি যখন এটি আর এর সাথে পড়ি তখন আমি read.csvকেবল 56,952 টি সারি এবং এই সতর্কতা পাই:

cit <- read.csv("citations.CSV", row.names = NULL, 
                comment.char = "", header = TRUE, 
                stringsAsFactors = FALSE,  
                colClasses= "character", encoding= "utf-8")

Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
  EOF within quoted string

আমি পুরো ফাইলটি আর এর মাধ্যমে পড়তে পারি readLines:

rl <- readLines(file("citations.CSV", encoding = "utf-8"))
length(rl)
[1] 112545

তবে আমি আর এটিকে টেবিল হিসাবে (আরবি) হিসাবে ফিরে পেতে পারি না read.csv:

write.table(rl, "rl.txt", quote = FALSE, row.names = FALSE)
rl_in <- read.csv("rl.txt", skip = 1, row.names = NULL)

Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
  EOF within quoted string

আমার Rঅধিবেশনটিতে পুরো ফাইলটি পেতে আমি কীভাবে এই ইওএফ বার্তাটি (যা একটি সতর্কতার চেয়ে ত্রুটি বলে মনে হয়) সমাধান করতে বা পুনরায় কাজ করতে পারি ?

CSV ফাইলগুলি পড়ার অন্যান্য পদ্ধতির সাথে আমারও একই সমস্যা রয়েছে:

require(sqldf)
cit_sql <- read.csv.sql("citations.CSV", sql = "select * from file")
require(data.table)
cit_dt <- fread("citations.CSV")
require(ff)
cit_ff <- read.csv.ffdf(file="citations.CSV")

এখানে আমার সেশন ইনফো ()

R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] tools     tcltk     stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] ff_2.2-11             bit_1.1-10            data.table_1.8.8      sqldf_0.4-6.4        
 [5] RSQLite.extfuns_0.0.1 RSQLite_0.11.4        chron_2.3-43          gsubfn_0.6-5         
 [9] proto_0.3-10          DBI_0.2-7   

উত্তর:


197

আপনার উদ্ধৃতি অক্ষম করা দরকার।

cit <- read.csv("citations.CSV", quote = "", 
                 row.names = NULL, 
                 stringsAsFactors = FALSE)

str(cit)
## 'data.frame':    112543 obs. of  13 variables:
##  $ row.names    : chr  "10.2307/675394" "10.2307/30007362" "10.2307/4254931" "10.2307/20537934" ...
##  $ id           : chr  "10.2307/675394\t" "10.2307/30007362\t" "10.2307/4254931\t" "10.2307/20537934\t" ...
##  $ doi          : chr  "Archaeological Inference and Inductive Confirmation\t" "Sound and Sense in Cath Almaine\t" "Oak Galls Preserved by the Eruption of Mount Vesuvius in A.D. 79_ and Their Probable Use\t" "The Arts Four Thousand Years Ago\t" ...
##  $ title        : chr  "Bruce D. Smith\t" "Tomás Ó Cathasaigh\t" "Hiram G. Larew\t" "\t" ...
##  $ author       : chr  "American Anthropologist\t" "Ériu\t" "Economic Botany\t" "The Illustrated Magazine of Art\t" ...
##  $ journaltitle : chr  "79\t" "54\t" "41\t" "1\t" ...
##  $ volume       : chr  "3\t" "\t" "1\t" "3\t" ...
##  $ issue        : chr  "1977-09-01T00:00:00Z\t" "2004-01-01T00:00:00Z\t" "1987-01-01T00:00:00Z\t" "1853-01-01T00:00:00Z\t" ...
##  $ pubdate      : chr  "pp. 598-617\t" "pp. 41-47\t" "pp. 33-40\t" "pp. 171-172\t" ...
##  $ pagerange    : chr  "American Anthropological Association\tWiley\t" "Royal Irish Academy\t" "New York Botanical Garden Press\tSpringer\t" "\t" ...
##  $ publisher    : chr  "fla\t" "fla\t" "fla\t" "fla\t" ...
##  $ type         : logi  NA NA NA NA NA NA ...
##  $ reviewed.work: logi  NA NA NA NA NA NA ...

আমার মনে হয় এই ধরণের লাইনের কারণে ("কাঁটা" এবং "বিয়োগ" পরীক্ষা করুন)

 readLines("citations.CSV")[82]
[1] "10.2307/3642839,10.2307/3642839\t,\"Thorn\" and \"Minus\" in Hieroglyphic Luvian Orthography\t,H. Craig Melchert\t,Anatolian Studies\t,38\t,\t,1988-01-01T00:00:00Z\t,pp. 29-42\t,British Institute at Ankara\t,fla\t,\t,"

ধন্যবাদ, এটি একটি সহজ সমাধান। এখন freadআপনি এই পরিস্থিতিতে কাজ সম্পর্কে কি মনে করেন ? আমি এটি পছন্দ করি কারণ এটি এর চেয়ে অনেক দ্রুত read.csv। তবে freadকোনও quoteযুক্তি বলে মনে হচ্ছে না
বেন

1
@ বেন আমি এটিকে সফলতা ছাড়াই খুব বেশি কাজ করার চেষ্টা করেছি এবং আপনি উল্লেখ করেছেন freadযে এম্বেড থাকা উক্তিটি সাধারণভাবে ভাল খেলবে না, তবে আমি নিশ্চিত যে খুব শীঘ্রই একটি কার্যকর কাজ হবে। stackoverflow.com/questions/16094025/...
dickoa

1
আমি যখন ব্যবহার করতাম তখন আমার কাছে 7,000 সারি write.csv()ছিল এবং সাথে 403 ফিরে আসছিল read.csv()। উদ্ধৃতি যোগ করা = "" আমাকে 410 সারি পর্যন্ত পেয়েছে। read.table()এর চেয়ে ভাল কিছু হয় না। আমি অবাক হয়েছি আর কি কি চেষ্টা করা যেতে পারে ...
হ্যাক-আর

2
হ্যাক-আর হিসাবে একই সমস্যা, উক্তিটি যোগ করে = "" আমার সারি গণনাটি 30,000 দ্বারা বাড়িয়েছে তবে আমি এখনও 200,000 এরও বেশি অনুপস্থিত।
এসজেডিএস

1
আপনি কেন এটি যুক্ত করতে হবে তা সম্পর্কে একটি লাইন লিখতে পারেন? (আমি আরথ শিখার চেষ্টা করে পাইথন প্রোগ্রামার)। অন্যথায় উত্তরটি নিখুঁত (+1)
ভার্গব রাও

10

আমি একজন নতুন ইস-আর ব্যবহারকারী এবং ভেবেছিলাম এটি অন্য কারও সাহায্য করার ক্ষেত্রে আমি এটি পোস্ট করতাম। আমি একটি পাঠ্য ফাইল (কমা দিয়ে পৃথক) থেকে ডেটা পড়ার চেষ্টা করছিলাম যাতে কয়েকটি স্প্যানিশ অক্ষর অন্তর্ভুক্ত ছিল এবং এটি খুঁজে বের করতে আমাকে চিরতরে নিয়ে যায়। আমি জানতাম যে ইউটিএফ -8 এনকোডিংটি ব্যবহার করতে হবে, শিরোনামটি আর্গুয়েসটি সত্য হিসাবে সেট করা দরকার, এবং আমাকে "," এ সেপ যুক্তিটি সেট করতে হবে, তবে তারপরেও আমি হ্যাং আপগুলি পেয়েছি। এই পোস্টটি পড়ার পরে আমি ফিল আর্গুটি সত্যে সেট করার চেষ্টা করেছি, তবে তারপরে একই "ইওএফ কোটড স্ট্রিংয়ের মধ্যে" পেয়েছি যা আমি উপরের মত একই পদ্ধতিতে ঠিক করতে সক্ষম হয়েছি। আমার সফল পঠনযোগ্য টেবিল দেখে মনে হচ্ছে:

target <- read.table("target2.txt", fill=TRUE, header=TRUE, quote="", sep=",", encoding="UTF-8")

ফলাফলটিতে স্প্যানিশ ভাষার অক্ষর রয়েছে এবং একইরকম অস্পষ্টতা আমার কাছে ছিল, তাই আমি এটিকে একটি সাফল্য বলছি! সবাইকে ধন্যবাদ!


6

আর সহায়তা বিভাগে, উপরে উল্লিখিত হিসাবে, কেবল যোগ করে সম্পূর্ণভাবে উদ্ধৃতি অক্ষম করা:

    quote = "" 

আমার কাছে কাজ করেছেন।

"উদ্ধৃত স্ট্রিংয়ের মধ্যে EOF" ত্রুটিটি এর সাথে ঘটেছিল:

    > iproscan.53A.neg     = read.csv("interproscan.53A.neg.n.csv",
    +                        colClasses=c(pb.id      = "character",
    +                                     genLoc     = "character",
    +                                     icode      = "character",
    +                                     length     = "character",
    +                                     proteinDB  = "character",
    +                                     protein.id = "character",
    +                                     prot.desc  = "character",
    +                                     start      = "character",
    +                                     end        = "character",
    +                                     evalue     = "character",
    +                                     tchar      = "character",
    +                                     date       = "character",
    +                                     ipro.id    = "character",
    +                                     prot.name  = "character",
    +                                     go.cat     = "character",
    +                                     reactome.id= "character"),
    +                                     as.is=T,header=F)
    Warning message:
    In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
      EOF within quoted string
    > dim(iproscan.53A.neg)
    [1] 69383    16

এবং এতে পঠিত ফাইলটি 6,619 টি লাইন অনুপস্থিত ছিল। তবে উদ্ধৃতি অক্ষম করে

    > iproscan.53A.neg     = read.csv("interproscan.53A.neg.n.csv",
    +                        colClasses=c(pb.id      = "character",
    +                                     genLoc     = "character",
    +                                     icode      = "character",
    +                                     length     = "character",
    +                                     proteinDB  = "character",
    +                                     protein.id = "character",
    +                                     prot.desc  = "character",
    +                                     start      = "character",
    +                                     end        = "character",
    +                                     evalue     = "character",
    +                                     tchar      = "character",
    +                                     date       = "character",
    +                                     ipro.id    = "character",
    +                                     prot.name  = "character",
    +                                     go.cat     = "character",
    +                                     reactome.id= "character"),
    +                                     as.is=T,header=F,**quote=""**)    
    > 
    > dim(iproscan.53A.neg)
    [1] 76002    16

ত্রুটিবিহীন পরিশ্রম করে এবং সমস্ত লাইন সফলভাবে পড়েছিল।


4
আপনি পূর্বের উত্তরটি পুনরাবৃত্তি করছেন এবং তারপরে কোড ব্লকের ভিতরে অপ্রয়োজনীয় ফ্ল্যাঙ্কিং ডাবল অ্যাসিড্রিকগুলি যুক্ত করে এর ইউটিলিটি পঙ্গু করছেন।
আইআরটিএফএম

3

আমিও এই সমস্যায় পড়েছি এবং এটি ব্যবহার করে অনুরূপ ইওএফ ত্রুটিটি ব্যবহার করতে সক্ষম হয়েছি:

read.table("....csv", sep=",", ...)

লক্ষ্য করুন যে বিভাজক পরামিতি আরও সাধারণ মধ্যে সংজ্ঞায়িত করা হয় read.table()


2
হাই, এটি আমার পক্ষে কাজ করে না ... আমি পঠনযোগ্য টেবিলে একটি ত্রুটি পেয়েছি ("। সিএসভি",: কলামের নামের চেয়ে বেশি কলাম - মনে হচ্ছে এড়িয়ে যাওয়া (এড়িয়ে যাওয়া =)) সঠিকভাবে কাজ করে না ...
maycca

3

প্রকৃতপক্ষে, read.csv()পাঠ্য সামগ্রীর সাথে একটি ফাইল পড়ার জন্য একটি ভাল ধারণা নয়, সেটটি quote=""কেবলমাত্র একটি অস্থায়ী সমাধান হিসাবে উদ্ধৃতিটি অক্ষম করুন , এটি কেবল পৃথক উদ্ধৃতি চিহ্নের সাথে কাজ করেছে। সতর্কতার কারণ হতে পারে এমন আরও কিছু কারণ রয়েছে যেমন কিছু বিশেষ চরিত্র।

স্থায়ী সমাধান (ব্যবহার করে read.csv()), এই বিশেষ চরিত্রগুলি কী তা সন্ধান এবং এগুলি নির্মূল করার জন্য একটি নিয়মিত অভিব্যক্তি ব্যবহার করা একটি ধারণা।

আপনি কি কখনও প্যাকেজ ইনস্টল করার কথা ভাবেন {data.table}এবং fread()ফাইলটি পড়তে ব্যবহার করুন? এটি অনেক দ্রুত এবং এটি আপনাকে ইওএফ সতর্কতা দিয়ে বিরক্ত করবে না। নোট করুন যে ফাইলটি এটি লোড করে তা ডাটা.ট্যাবিল অবজেক্ট হিসাবে সংরক্ষণ করা হবে তবে ডেটা.ফ্রেম অবজেক্ট নয়। ক্লাস ডেটা.টবেলে অনেকগুলি ভাল বৈশিষ্ট্য রয়েছে তবে যাইহোক, আপনি as.data.frame()প্রয়োজনে এটি ব্যবহার করে রূপান্তর করতে পারেন ।


2

আমার অনুরূপ সমস্যা ছিল: ইওএফ-ওয়ার্নিং এবং কেবলমাত্র ডেটার একটি অংশ রিড সিএসভি () দিয়ে লোড হচ্ছে was আমি উদ্ধৃতিগুলি = "" চেষ্টা করেছি, তবে এটি কেবল ইওএফ-ওয়ার্নিং সরিয়ে ফেলেছে।

তবে লোড হচ্ছে না এমন প্রথম সারিটি দেখে আমি দেখতে পেলাম যে কোনও একটি ঘরে একটি বিশেষ অক্ষর, একটি তীর → (হেক্সাডেসিমাল মান 0x1 এ) রয়েছে। তীরটি মুছে ফেলার পরে আমি সাধারণভাবে লোড করার জন্য ডেটা পেয়েছি।


1
একই সমস্যা, কোনও ম্যানুয়াল হস্তক্ষেপ ছাড়াই এটিকে সমাধান করার আর কোনও উপায় আছে কি?
মোহিত

2

আমারও একই সমস্যা ছিল। তবে আমার ক্ষেত্রে, সমস্যাটির কারণটি কিছু পাঠ্য মানগুলির মধ্যে অ্যাডোস্ট্রোফস (অর্থাত্ একক উদ্ধৃতি চিহ্ন) উপস্থিতি ছিল। এটি বিশেষত ফরাসি পাঠ্য সহ ডেটা সহ কাজ করার সময় ঘন ঘন হয় eg ল'আউট্রে যাত্রা »

সুতরাং, সমাধান কেবল বাদ দেওয়ার « '» প্রতীক, এবং এইভাবে উদ্ধৃতি যুক্তির ডিফল্ট সেটিং সমন্বয় ব্যবহার ছিল উদ্ধৃতি = "\" " (অর্থাত ডবল উদ্ধৃতি চিহ্ন শুধুমাত্র ), সবকিছু ঠিক কাজ করেন।

আমি আশা করি যে আপনার কিছু সাহায্য করতে পারে। চিয়ার্স।


0

Readr প্যাকেজ এই সমস্যাটি ঠিক করবে।

install.packages('readr')
library(readr)
readr::read_csv('yourfile.csv')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.