The question is how to use a URL in place of a file= argument for read.*.functions that do not support this internally. e.g., utils::read.table() and her family all support a file= argument that can take a URL equally well as a local file. So, if I have a file on the web, I can equally well do > langren <- read.csv("langrens.csv", header=TRUE) > langren <- read.csv("http://euclid.psych.yorku.ca/SCS/Gallery/Private/langrens.csv", header=TRUE) where the latter is more convenient for posts to this list or distributed examples. rimage::read.jpeg() doesn't support URLs, and the only way I've found is to download the image file from a URL to a temp file, in several steps. This is probably a more general problem than just read.jpeg, so maybe there is a general idiom for this case, or better-- other read.* functions could be encouraged to support URLs. > library(rimage) > # local file: OK > gimage <- read.jpeg("C:/Documents/milestone/images/vanLangren/google-toledo-rome3.jpg") > > gimageloc <- "http://euclid.psych.yorku.ca/SCS/Gallery/images/Private/Langren/google-toledo-rome3.jpg" > dest <- paste(tempfile(),'.jpg', sep='') > download.file(gimageloc, dest, mode="wb") trying URL 'http://euclid.psych.yorku.ca/SCS/Gallery/images/Private/Langren/google-toledo-rome3.jpg' Content type 'image/jpeg' length 35349 bytes (34 Kb) opened URL downloaded 34 Kb > dest [1] "C:\\DOCUME~1\\default\\LOCALS~1\\Temp\\Rtmp9nNTdV\\file5f906952.jpg" > # Is there something simpler?? > gimage <- read.jpeg(dest) > # I thought file() might work, but evidently not. > gimage <- read.jpeg(file(gimageloc)) Error in read.jpeg(file(gimageloc)) : Can't open file. > -- Michael Friendly Email: friendly AT yorku DOT ca Professor, Psychology Dept. York University Voice: 416 736-5115 x66249 Fax: 416 736-5814 4700 Keele Street http://www.math.yorku.ca/SCS/friendly.html Toronto, ONT M3J 1P3 CANADA
Hi Michael, In general, I think you should be able to do: gimage <- read.jpeg(url(gimageloc)) or alternatively use the EBImage from bioconductor which will read from a url automatically (it also opens a much wider range of file types) library(EBImage) img <- readImage(gimageloc, TrueColor) Hadley On Wed, Dec 10, 2008 at 1:17 PM, Michael Friendly <friendly at yorku.ca> wrote:> The question is how to use a URL in place of a file= argument for > read.*.functions that do > not support this internally. > > e.g., utils::read.table() and her family all support a file= argument that > can take a URL > equally well as a local file. So, if I have a file on the web, I can > equally well do > >> langren <- read.csv("langrens.csv", header=TRUE) >> langren <- >> read.csv("http://euclid.psych.yorku.ca/SCS/Gallery/Private/langrens.csv", >> header=TRUE) > > where the latter is more convenient for posts to this list or distributed > examples. > rimage::read.jpeg() doesn't support URLs, and the only way I've found is to > download the > image file from a URL to a temp file, in several steps. > This is probably a more general problem than just read.jpeg, > so maybe there is a general idiom for this case, or better-- other read.* > functions could > be encouraged to support URLs. > >> library(rimage) >> # local file: OK >> gimage <- >> read.jpeg("C:/Documents/milestone/images/vanLangren/google-toledo-rome3.jpg") >> >> gimageloc <- >> "http://euclid.psych.yorku.ca/SCS/Gallery/images/Private/Langren/google-toledo-rome3.jpg" >> dest <- paste(tempfile(),'.jpg', sep='') >> download.file(gimageloc, dest, mode="wb") > trying URL > 'http://euclid.psych.yorku.ca/SCS/Gallery/images/Private/Langren/google-toledo-rome3.jpg' > Content type 'image/jpeg' length 35349 bytes (34 Kb) > opened URL > downloaded 34 Kb > >> dest > [1] "C:\\DOCUME~1\\default\\LOCALS~1\\Temp\\Rtmp9nNTdV\\file5f906952.jpg" >> # Is there something simpler?? >> gimage <- read.jpeg(dest) > >> # I thought file() might work, but evidently not. >> gimage <- read.jpeg(file(gimageloc)) > Error in read.jpeg(file(gimageloc)) : Can't open file. >> > > -- > Michael Friendly Email: friendly AT yorku DOT ca Professor, Psychology > Dept. > York University Voice: 416 736-5115 x66249 Fax: 416 736-5814 > 4700 Keele Street http://www.math.yorku.ca/SCS/friendly.html > Toronto, ONT M3J 1P3 CANADA > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- http://had.co.nz/
If you use url("http://euclid.psych.yorku.ca/SCS/Gallery/Private/langrens.csv") then most functions will work, because that creates a connection to read the URL. Most functions that can read files do it through connections. Duncan Murdoch On 12/10/2008 2:17 PM, Michael Friendly wrote:> The question is how to use a URL in place of a file= argument for > read.*.functions that do > not support this internally. > > e.g., utils::read.table() and her family all support a file= argument > that can take a URL > equally well as a local file. So, if I have a file on the web, I can > equally well do > > > langren <- read.csv("langrens.csv", header=TRUE) > > langren <- > read.csv("http://euclid.psych.yorku.ca/SCS/Gallery/Private/langrens.csv", > header=TRUE) > > where the latter is more convenient for posts to this list or > distributed examples. > > rimage::read.jpeg() doesn't support URLs, and the only way I've found is > to download the > image file from a URL to a temp file, in several steps. > This is probably a more general problem than just read.jpeg, > so maybe there is a general idiom for this case, or better-- other > read.* functions could > be encouraged to support URLs. > > > library(rimage) > > # local file: OK > > gimage <- > read.jpeg("C:/Documents/milestone/images/vanLangren/google-toledo-rome3.jpg") > > > > gimageloc <- > "http://euclid.psych.yorku.ca/SCS/Gallery/images/Private/Langren/google-toledo-rome3.jpg" > > dest <- paste(tempfile(),'.jpg', sep='') > > download.file(gimageloc, dest, mode="wb") > trying URL > 'http://euclid.psych.yorku.ca/SCS/Gallery/images/Private/Langren/google-toledo-rome3.jpg' > Content type 'image/jpeg' length 35349 bytes (34 Kb) > opened URL > downloaded 34 Kb > > > dest > [1] "C:\\DOCUME~1\\default\\LOCALS~1\\Temp\\Rtmp9nNTdV\\file5f906952.jpg" > > # Is there something simpler?? > > gimage <- read.jpeg(dest) > > > # I thought file() might work, but evidently not. > > gimage <- read.jpeg(file(gimageloc)) > Error in read.jpeg(file(gimageloc)) : Can't open file. > > >