2011-05-22 11 views
6

Wygnij swój mięsień RCurl/XML. Najkrótszy kod wygrywa. Analizować w R: http://pastebin.com/CDzYXNbGWyzwanie RCurl lub XML: Przeczytaj Pastebin w R

Dane powinny być:

structure(list(Treatment = structure(c(2L, 2L, 1L, 1L), .Label = c("C", 
"T"), class = "factor"), Gender = c("M", "F", "M", "F"), Response = c(56L, 
58L, 6L, 63L)), .Names = c("Treatment", "Gender", "Response"), row.names = c(NA, 
-4L), class = "data.frame") 

Powodzenia!

Uwaga: dane fikcyjne uprzejmie dostarczone przez to pytanie: Adding space between bars in ggplot2

Odpowiedz

5

sam pomysł jak kohske ale nieco krótsze i bardziej jasne myślę

library(XML) 
eval(parse(text=gsub('\r\n','\n',xpathApply(htmlTreeParse('http://pastebin.com/CDzYXNbG',useInternal=T),'//textarea',xmlValue)))) 
+0

Do tej pory wygląda jak Siema jesteś na czele, ponieważ przyciąga on ramkę danych bez innych znaków i pozwala łatwo przypisać do zmiennej. –

+0

+1 dla przejrzystości ścinania kodu. I bez oszukiwania! –

+0

Wybrany za najkrótszy kod za pomocą określonej strony. Congratz! –

1

nie jestem całkowicie pewien, co staramy się osiągnąć tutaj, ale być może robi to, co poprosić o (nie używając żadnych fantazyjnych pakietów, tylko regex) :

fullText<-(paste(readLines("http://pastebin.com/CDzYXNbG"), collapse="\n")) 
regexp<-"<textarea[^>]*id=\"paste_code\"[^>]*>(.*)</textarea>" 
txtarpos<-regexpr(regexp, fullText) 
txtarstrt<-txtarpos[1] 
txtarlen<-unlist(attributes(txtarpos)["match.length"]) 
txtarstp<-txtarstrt+txtarlen 
txtarpart<-substr(fullText, txtarpos[1], txtarstp) 
retval<-gsub("\n", "", gsub("&quot;", "\"", gsub(regexp, "\\1", txtarpart), fixed=TRUE), fixed=TRUE) 
cat(retval) 

Jestem również pewny, że można to poprawić nieco, ale wykonuje to zadanie, o które pytałeś. Nawet jeśli nie: dzięki, że chcę odświeżyć moje podstawy regexu!

+0

'Błąd: nieoczekiwane wejście w "retval <-gsub (" \ n” , "", gsub (""", "\" ", gsub (regexp," \\ 1 ", txtarpart), fixed = TRUE), fixed = TRUE) \" 'Interesujące użycie czystego regex! –

4

RCurl nie jest konieczne dla mojego kodu, ponieważ pakiety XML mogą analizować adres URL dla argumentu pliku.

proszę wykonać

library(XML) 

przed poniższych przykładach.

Kod 1 jest oneliner:

eval(parse(text=htmlTreeParse("http://pastebin.com/CDzYXNbG",handlers=(function(){qt <- NULL;list(textarea=function(node,...){qt<<-gsub("[\r\n]", "", unclass(node$children$text)$value);node},.qt=function()qt)})())$.qt())) 

Code 2 jest krótsza, ale myślę, że to nie jest najkrótsza.

htmlTreeParse("http://pastebin.com/CDzYXNbG",h=list(textarea=function(n)z<<-gsub("[\r\n]","",unclass(n$c$t)$v)));eval(parse(text=z)) 

Ponieważ to pytanie jest rodzajem gry, odszyfruj ten kod.



AKTUALIZACJA

Po obejrzeniu doskonałe rozwiązanie @JD Longa, oto najkrótszy kod:

eval(parse(file(sub("m/","m/raw.php?i=","http://pastebin.com/CDzYXNbG")))) 

Teraz pytanie brzmi, jak zrobić żądany ciąg URL w najkrótszym kodu ;-p

Zaktualizowano ponownie. Jest to krótsze przez niektóre postacie.

source(sub("m/","m/raw.php?i=","http://pastebin.com/CDzYXNbG"))$va 
+0

Code 1 działa Kod 2 nie może być przypisany do zmiennej.Takie dobre spróbujmy! –

+0

Możesz przypisać w Kodzie 2. Proszę uważnie przeczytać kod – kohske

+0

Technicznie najkrótsza, ale nie używa strony podanej –

4

Chłopaki robią to zbyt trudne:

eval(parse(file("http://pastebin.com/raw.php?i=CDzYXNbG")))

OK, więc oszukany.Ale wychodząc z tego samego adresu URL można uzyskać ten sam koniec:

eval(parse(file(paste("http://pastebin.com/raw.php?i=", strsplit("http://pastebin.com/CDzYXNbG", "/")[[1]][4], sep=""))))

która nadal stawia mnie na czele :)

+0

+1 Podoba mi się tego rodzaju rozwiązanie. – kohske

+0

+1 dla kreatywnego cheaty " –

+0

Podoba mi się pierwszy;) –

Powiązane problemy