我正在尝试将一些化学结构图像添加到我创建的一些图中。我正在使用ACToR数据库访问化学结构。例如:
(http://actor.epa.gov/actor/image?format=png%3Aw250%2Ch250&casrn=80-05-7)
这个网站的好处是你可以改变网址中的大小和化学物质,这样我就可以自动抓取图像。我希望存储一个包含CAS编号的对象,然后遍历CAS编号来制作图表。
例如:
library(png)
casnums <- ("80-05-7","77-40-7","1478-61-1")
image.list <- list()
for(cas in casnums){
image.list[[cas]] <- readPNG(paste0("http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casrn=",cas))
}
我尝试使用readPNG
包中的png
,并尝试使用rgdal
包。不幸的是,据我所知,ACToR只会以png或jpeg格式生成图像 - 因此我无法使用grImport
包来读取矢量图像。
我真的希望找到一个解决方案,我不必手动下载每个图像 - 其中有很多。我会接受一个解决方案,其中R将图像下载并下载到文件夹,然后我可以使用类似png
包或rgdal
包的内容来加载图像并绘制它们。
回应@ialm:以下是我在第一次评论后尝试的内容:
> download.file(url="http://actor.epa.gov/actor/image?format=png%3Aw250%2Ch250&casrn=80-05-7",destfile="test.png")
trying URL 'http://actor.epa.gov/actor/image?format=png%3Aw250%2Ch250&casrn=80-05-7'
Content type 'image/png' length 200 bytes
opened URL
downloaded 6691 bytes
Warning message:
In download.file(url = "http://actor.epa.gov/actor/image?format=png%3Aw250%2Ch250&casrn=80-05-7", :
downloaded length 6691 != reported length 200
当我打开图像时,它只有7 KB,我在图像查看器中收到以下消息:“Windows Photo Viewer无法打开此图片,因为该文件似乎已损坏,损坏或太大。“
我应该注意到我(违背我的意愿)使用Windows 7.我也尝试过使用RStudio和R. RStudio给了我警告信息,而R没有 - 但是R创建了看起来像是同一个文件(7KB)仍然没有打开。
回应@Greg Snow:为了添加一些上下文,我在RStudio的一个全新的R Console中运行了以下内容。我使用64位Rv3.0.1和64位RStudio v0.97.551。
> library(png)
> search()
[1] ".GlobalEnv" "package:png" "tools:rstudio" "package:stats" "package:graphics" "package:grDevices"
[7] "package:utils" "package:datasets" "package:methods" "Autoloads" "package:base"
> con <- url("http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casrn=1478-61-1",open='rb')
> rawpng <- readBin(con, what='raw', n=1e6)
> close(con)
> png1 <- readPNG(rawpng)
Error in readPNG(rawpng) : libpng error: bad adaptive filter value
> ls()
[1] "con" "rawpng"
答案 0 :(得分:2)
(只是将我的评论作为答案发布)
您可以使用download.file
功能从网上下载文件。
此外,Windows用户可能必须更改某些参数。似乎mode="wb"
是正确下载和查看这些png
文件的必要参数。
所以,比如:
download.file("http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casrn=80-05-7",
destfile="tmp.png", mode="wb")
为我工作。
答案 1 :(得分:2)
这是一种适用于单个图像的方法(它可以包装在循环中使用的函数中):
con <- url("http://actor.epa.gov/actor/image?format=png%3Aw1000%2Ch1000&casrn=1478-61-1",
open='rb')
rawpng <- readBin(con, what='raw', n=50000)
close(con)
png1 <- readPNG(rawpng)
我用它测试了它:
plot(1:10, type='n')
rasterImage( as.raster(png1), 3,3,8,8 )
获得50000需要一些猜测,而其他文件可能会有所不同(实际上我应该使用48849,但实际上它可能会在文件之间发生变化)。
答案 2 :(得分:1)
请注意,Bioconductor R软件包EBImage能够直接从URL加载图像并将其可视化:
library(EBImage)
img = readImage("path/to/your/image/file or URL")
display(img, method = "raster")
干杯,
安杰伊