Though the manual states that this will be a future feature:
arrow.size The size of the arrows. Currently this is a constant, so it is the same for every edge. If a vector is submitted then only the first element is used, ie. if this is taken from an edge attribute then only the attribute of the first edge is used for all arrows. This will likely change in the future.
The default value is 1.
I was wondering if there was a hack around to allow the arrow size to match the edge width (each edge having its own width).
d <- data.frame(start=c("a","a","b","c"),end=c("b","b","c","b"), size=rnorm(4))
graph <- graph.data.frame(d, directed=T)
plot(graph,
vertex.color="white",
edge.width=E(graph)$size*20,
edge.arrow.size=E(graph)$size)