As I said before, I consider the R-Help mailing list an invaluable source of information if you want to get things done in R. Recently the stackoverflow website, a site where programmers can post and answer questions about a wide list of programming languages, has been populated with a lot of questions and answers regarding R thanks to a 'virtual' flash mob. Because of this event, stackoverflow has become a extremely precious web 2.0 resource for the R community.
An other R Flash Mob event is scheduled for Tuesday, 8th September. I warmly recommend all my readers to take part to this event so to populate the stackoverflow site with even more useful questions and answers about our beloved R.
You can find both the event details and a letter, depicting the event, which you may forward to your colleagues/R-fanboy here.
"A big computer, a complex algorithm and a long time does not equal science." -- Robert Gentleman
venerdì 4 settembre 2009
mercoledì 5 agosto 2009
Locate the position of CRAN mirror sites on a map using Google Maps
Inspired by this post (suggested here by the always useful Revolutions blog), I attempted to plot the position of CRAN mirrors on a map taking advantage of the nice R package RgoogleMaps (check the dependencies!). Below the code:
CAVEAT: To reproduce the example you need the gml file you can download from here , a Google account and a Google Maps API key. Here you can sign up for a free API key.
library(XML)
# download.file("http://www.maths.lancs.ac.uk/~rowlings/R/Cranography/cran.gml",destfile="cran.gml")
cran.gml <- xmlInternalTreeParse("cran.gml")
# Create a data.frame assembling all the information from the gml file
Name <- sapply(getNodeSet(cran.gml, "//ogr:Name"), xmlValue)
Country <- sapply(getNodeSet(cran.gml, "//ogr:Country"), xmlValue)
City <- sapply(getNodeSet(cran.gml, "//ogr:City"), xmlValue)
URL <- sapply(getNodeSet(cran.gml, "//ogr:URL"), xmlValue)
Host <- sapply(getNodeSet(cran.gml, "//ogr:Host"), xmlValue)
Maintainer <- sapply(getNodeSet(cran.gml, "//ogr:Maintainer"), xmlValue)
CountryCode <- sapply(getNodeSet(cran.gml, "//ogr:countryCode"), xmlValue)
lng <- as.numeric(sapply(getNodeSet(cran.gml, "//ogr:lng"), xmlValue))
lat <- as.numeric(sapply(getNodeSet(cran.gml, "//ogr:lat"), xmlValue))
cran.mirrors <- data.frame(Name, Country, City, URL, Host, Maintainer, CountryCode, lng, lat)
# cran.mirrors <- cbind(getCRANmirrors(), lng, lat) ## alternatively
library(RgoogleMaps)
# Define the markers:
cran.markers <- cbind.data.frame( lat=cran.mirrors$lat, lon=cran.mirrors$lng,
size=rep('tiny', length(cran.mirrors$lat)), col=colors()[1:length(cran.mirrors$lat)],
char=rep('',length(cran.mirrors$lat)) )
# Get the bounding box:
bb <- qbbox(lat = cran.markers[,"lat"], lon = cran.markers[,"lon"])
num.mirrors <- 1:dim(cran.markers)[1] ## to visualize only a subset of the cran.mirrors
maptype <- c("roadmap", "mobile", "satellite", "terrain", "hybrid", "mapmaker-roadmap", "mapmaker-hybrid")[1]
# Download the map (either jpg or png):
MyMap <- GetMap.bbox(bb$lonR, bb$latR, destfile = paste("Map_", maptype, ".png", sep=""), GRAYSCALE=F, maptype = maptype)
# Plot:
png(paste("CRANMirrorsMap_", maptype,".png", sep=""), 640, 640)
tmp <- PlotOnStaticMap(MyMap,lat = cran.markers[num.mirrors,"lat"], lon = cran.markers[num.mirrors,"lon"],
cex=1, pch="R",col=as.numeric(cran.mirrors$Country), add=F)
dev.off()## Hosts from Italy
maptype <- c("roadmap", "mobile", "satellite", "terrain", "hybrid", "mapmaker-roadmap", "mapmaker-hybrid")[4]
num.it <- row.names(cran.mirrors[cran.mirrors$CountryCode=="IT",])
# Get the bounding box:
bb.it <- qbbox(lat = cran.markers[num.it,"lat"], lon = cran.markers[num.it,"lon"])
# Download the map (either jpg or png):
ITMap <- GetMap.bbox(bb.it$lonR, bb.it$latR, destfile = paste("ITMap_", maptype, ".png", sep=""), GRAYSCALE=F, maptype = maptype)
#ITMap <- GetMap.bbox(bb.it$lonR, bb.it$latR, destfile = paste("ITMap_", maptype, ".jpg", sep=""), GRAYSCALE=F, maptype = maptype)
# Plot:
png(paste("CRANMirrorsMapIT_", maptype,".png", sep=""), 640, 640);
tmp <- PlotOnStaticMap(ITMap,lat = cran.markers[num.it,"lat"], lon = cran.markers[num.it,"lon"],
cex=2, pch="R",col="dodgerblue", add=F)
# tmp <- PlotOnStaticMap(ITMap,lat = cran.markers[num.it,"lat"], lon = cran.markers[num.it,"lon"],labels=as.character(cran.mirrors[cran.mirrors$CountryCode=="IT",]$Host),col="black", FUN=text, add=T)
dev.off()CAVEAT: To reproduce the example you need the gml file you can download from here , a Google account and a Google Maps API key. Here you can sign up for a free API key.
domenica 26 luglio 2009
Rosetta Code
Today I'd like to suggest the interesting Rosetta Code site:
Since the R coverage of the different tasks is still largely incomplete, I encourage everyone to populate the missing tasks with appropriate R code.
Rosetta Code is a programming chrestomathy site. The idea is to present solutions to the same task in as many different languages as possible, to demonstrate how languages are similar and different, and to aid a person with a grounding in one approach to a problem in learning another.
Since the R coverage of the different tasks is still largely incomplete, I encourage everyone to populate the missing tasks with appropriate R code.
venerdì 3 luglio 2009
File Management in R: two recipes
Remove files with a specific pattern in R:
A quick basic tip which can come in handy whether you need to rapidly remove files from a directory:
Compress multiple files/folders in separate zip files:
This tip came handy to me when I had to compress into separate .cbz files (zip files with an other extension) a vast collection of folders containing scans for different numbers of a comic book series (to create .cbz files instead of zip files, just substitute .cbz to .zip in the following code).
Clearly, for advanced needs, you can use system() and all the unix tools installed onto your machine.
Note: This post was updated on 1/5/2012
A quick basic tip which can come in handy whether you need to rapidly remove files from a directory:
junk <- dir(path="your_path", pattern="your_pattern") # ?dir file.remove(junk) # ?file.remove
Compress multiple files/folders in separate zip files:
This tip came handy to me when I had to compress into separate .cbz files (zip files with an other extension) a vast collection of folders containing scans for different numbers of a comic book series (to create .cbz files instead of zip files, just substitute .cbz to .zip in the following code).
l=basename(list.dirs(recursive=F)) for (i in 1:length(l)) zip(paste(l[i],".zip",sep=""),files=l[i]) # ?zip
Clearly, for advanced needs, you can use system() and all the unix tools installed onto your machine.
Note: This post was updated on 1/5/2012
venerdì 26 giugno 2009
Set the significant digits for each column in a xtable for fancy Sweave output
This tip may be useful in the situations when you need to set the number of digits to print for the different columns in a matrix/data.frame to be outputted as a LaTeX table.
For example:
See here for a nice gallery depicting a large variety of outputs you can produce using the xtable package.
For example:
#install.packages("xtable")
#library(xtable)
tmp <- matrix(rnorm(9), 3, 3)
xtmp <- xtable(tmp)
digits(xtmp) <- c(0,0,3,4)
print(xtmp, include.rownames = FALSE) # row names suppressedSee here for a nice gallery depicting a large variety of outputs you can produce using the xtable package.
venerdì 19 giugno 2009
Iran Election analyzed with R
Here you can find a very interesting post depicting the R strengths in 'real-time statistics'.
I'd like to use the occasion to thank David Smith for hosting the best, imho, blog on R!
Follow Him on Twitter: @revodavid .
I'd like to use the occasion to thank David Smith for hosting the best, imho, blog on R!
Follow Him on Twitter: @revodavid .
lunedì 15 giugno 2009
Replacing 0 with NA - an evergreen from the list
This thread from the R-help list describe an evergreen tip that, at least once, is proved useful in R practice.
Iscriviti a:
Commenti (Atom)

