Re: [O] Referring to results rather than code block

2014-05-20 Thread Loris Bennett
Hi Nick,

Nick Dokos ndo...@gmail.com writes:

 Loris Bennett loris.benn...@fu-berlin.de writes:

 Hi,

 I have a code block like this

 #+NAME: users_per_month
 #+HEADER: :results append
 #+BEGIN_SRC sh :dir /root@sadmin:
 sacct=/cm/shared/apps/slurm/current/bin/sacct
 for y in {2014..2014}; do
 for m in {03..04}; do
 month=$y-$m
 first=$y-$m-01
 last=`date -d $first + 1 month - 1 day +%Y-%m-%d`
 n=`$sacct -S $first -E $last  -o user -X -n | sort | uniq | wc -l`
 echo $month $n
 done
 done
 #+END_SRC

 which produces something like this

 #+RESULTS: users_per_month
 | 2012-01 | 1 |
 | 2012-02 |10 |
 | 2012-03 |   100 |
 | 2012-04 |  1000 |

 I'm using append because the generation of a datapoint takes a while.

 I'd like to plot the data with something like:

 #+NAME: plot_users_per_month
 #+HEADER: var data=users_per_month
 #+HEADER: :results output graphics
 #+HEADER: :file ./users_per_month.pdf :exports both
 #+HEADER: :session *r*
 #+BEGIN_SRC R
 library(ggplot2)

 bar_colour  - #69B4D8 # steely blue

 month - data$V1
 users - data$V2
 df - data.frame(month,users)
 p - ggplot(df,aes(x=month,y=users)) +
   geom_bar(stat=identity,alpha=0.5,fill=bar_colour) +
   xlab(date) +
 ylab(users)
 p
 #+END_SRC

 However, this is just generating a plot of the data generated by the
 source block and not of the total results table.

 Can I give the results block a different name to the source block, so
 that I can refer to it directly, or should I be doing something
 completely different?


 I believe so: the source name ties the source block to the same named
 result block - that allows the source block to find the result block
 and modify it appropriately. The results block can be named and then
 that name can be used in the plotting block, e.g.


 #+name: foo
 #+BEGIN_SRC sh :results output table append :var n=5
 for x in $(seq $n)
 do
 echo $x $(expr $x \* $x)
 done
 #+END_SRC

 #+name: foo_results
 #+RESULTS: foo
 | 1 |  1 |
 | 2 |  4 |
 | 3 |  9 |
 | 4 | 16 |
 | 5 | 25 |


 #+NAME: plot_foo_results
 #+HEADER: :var data=foo_results
 #+HEADER: :file ./foo.pdf :exports both
 #+BEGIN_SRC gnuplot
 plot data
 #+END_SRC

 Nick

Oh, that's rather obvious *blush*.  I suppose I was thinking that the
whole results block is generated and it didn't occur to me to just give
it a name.

Thanks,

Loris  

-- 
This signature is currently under construction.




Re: [O] Referring to results rather than code block

2014-05-19 Thread Nick Dokos
Loris Bennett loris.benn...@fu-berlin.de writes:

 Hi,

 I have a code block like this

 #+NAME: users_per_month
 #+HEADER: :results append
 #+BEGIN_SRC sh :dir /root@sadmin:
 sacct=/cm/shared/apps/slurm/current/bin/sacct
 for y in {2014..2014}; do
 for m in {03..04}; do
 month=$y-$m
 first=$y-$m-01
 last=`date -d $first + 1 month - 1 day +%Y-%m-%d`
 n=`$sacct -S $first -E $last  -o user -X -n | sort | uniq | wc -l`
 echo $month $n
 done
 done
 #+END_SRC

 which produces something like this

 #+RESULTS: users_per_month
 | 2012-01 | 1 |
 | 2012-02 |10 |
 | 2012-03 |   100 |
 | 2012-04 |  1000 |

 I'm using append because the generation of a datapoint takes a while.

 I'd like to plot the data with something like:

 #+NAME: plot_users_per_month
 #+HEADER: var data=users_per_month
 #+HEADER: :results output graphics
 #+HEADER: :file ./users_per_month.pdf :exports both
 #+HEADER: :session *r*
 #+BEGIN_SRC R
 library(ggplot2)

 bar_colour  - #69B4D8 # steely blue

 month - data$V1
 users - data$V2
 df - data.frame(month,users)
 p - ggplot(df,aes(x=month,y=users)) +
   geom_bar(stat=identity,alpha=0.5,fill=bar_colour) +
   xlab(date) +
 ylab(users)
 p
 #+END_SRC

 However, this is just generating a plot of the data generated by the
 source block and not of the total results table.

 Can I give the results block a different name to the source block, so
 that I can refer to it directly, or should I be doing something
 completely different?


I believe so: the source name ties the source block to the same named
result block - that allows the source block to find the result block
and modify it appropriately. The results block can be named and then
that name can be used in the plotting block, e.g.


--8---cut here---start-8---
#+name: foo
#+BEGIN_SRC sh :results output table append :var n=5
for x in $(seq $n)
do
echo $x $(expr $x \* $x)
done
#+END_SRC

#+name: foo_results
#+RESULTS: foo
| 1 |  1 |
| 2 |  4 |
| 3 |  9 |
| 4 | 16 |
| 5 | 25 |


#+NAME: plot_foo_results
#+HEADER: :var data=foo_results
#+HEADER: :file ./foo.pdf :exports both
#+BEGIN_SRC gnuplot
plot data
#+END_SRC
--8---cut here---end---8---

Nick