emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Dan Davison <davison@stats.ox.ac.uk>
To: "Sébastien Vauban" <wxhgmqzgwmuf@spammotel.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: [babel] R questions
Date: Fri, 04 Dec 2009 19:45:41 -0500	[thread overview]
Message-ID: <87aaxy8czu.fsf@stats.ox.ac.uk> (raw)
In-Reply-To: <87tyw674n2.fsf@mundaneum.com> ("Sébastien Vauban"'s message of "Fri, 04 Dec 2009 23:31:29 +0100")

Sébastien Vauban <wxhgmqzgwmuf@spammotel.com> writes:

> Hello,
>
> One of this questions is a bit border-line, but I'm still trying ;-)
>
> I have this table generated by a script:
>
> #+results: abc2008
> | "2008/1"  | -78.59 |   1627.24 |
> | "2008/2"  | -80.17 |    700.33 |
> | "2008/3"  | -80.17 |     879.8 |
> | "2008/4"  | -80.17 | -25823.17 |
> | "2008/5"  | -80.17 |   3570.75 |
> | "2008/6"  | -81.77 |    2377.8 |
> | "2008/7"  | -81.77 |    2889.4 |
> | "2008/8"  | -81.77 |   2612.92 |
> | "2008/9"  | -81.77 |   1585.21 |
> | "2008/10" |  -83.4 |   1561.42 |
> | "2008/11" |  -83.4 |   2189.17 |
> | "2008/12" |     "" |        "" |
>
> I want to draw the 12 months with the values side by side.
>
> Problem #1: the "" in the last line hinder the generation of the graph. Format
> error.

Missing values in R are represented by the value NA. If you change the
last line of your table to

| "2008/12" |     NA |        NA |

then it works [1], [2], [3].

>
> #+srcname: expenses-bar-plot(abc = abc2008)
> #+begin_src R :results file :file abc2008.pdf
>     barplot(abc[,3], col = "red", main = "Profit and Loss 2008", las = 1, xlab
>     = "Months", ylab = "EUR")
> #+end_src
>
> Problem #2: I don't know how to ask for drawing the 2 columns. I've tried

OK, so one point that is arguably relevant to this mailing list is that
when org tables are read into R, the object that is created in R is a
*data frame*. Not a matrix. (A data frame can have columns of
different types; matrices are all one type). [4]

So to solve your problem, you'd need to read the description of the
height argument in the help page for barplot (?barplot), noting that it
says "either a vector or matrix", and also noting that it says that bars
correspond to columns (not rows), thus realising that you need to
explicitly convert the relevant columns of the data frame to a matrix
and then transpose.

However, your two columns have rather different magnitude values and so
are not very well suited for plotting on the same scale. Below I
rescaled the first column by a factor of 20 so you can at least see the
bars.

#+srcname: expenses-bar-plot-two-columns(abc = abc2008)
#+begin_src R :file abc2008.png
  ## select the two columns, convert to matrix, transpose and rescale top row.
  x <- t(as.matrix(abc[,2:3])) * c(20,1)
  barplot(x, col = rep(c("red","blue"), ncol(x)), main = "Profit and Loss 2008", las = 1, xlab= "Months", ylab = "EUR", beside=TRUE)
#+end_src

Dan



Footnotes:

[1] Note no quotes around NA here. You asked a good question about
quoting in org-babel; it will be answered.

[2] I guess one could potentially think about dealing with missing
values more explicitly in org-babel. E.g. there could be a header arg
specifying what values are to be treatyed as missing. Nothing like that
exists currently.

[3] You might think that an alternative would be to
do something like this in R

abc[abc == "\"\""] <- NA

but the trouble is that with those double quotes present, R will
interpret the column as containing character data rather than numeric,
and things will not be pretty.

[4] org-babel uses orgtbl-to-tsv followed by read.table() to convert the
org table into a data.frame in R. A source of much confusion with
R-beginners is that by default, read.table converts character columns
into the *factor* data type. Note that org-babel currently uses
'as.is=TRUE' when calling read.table and therefore does *not* convert to
factor. This may avoid some confusion among users but is
memory-inefficient and misses out on other advantages of factors.

  reply	other threads:[~2009-12-05  0:45 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-04 22:31 [babel] R questions Sébastien Vauban
2009-12-05  0:45 ` Dan Davison [this message]
2009-12-08  9:50   ` Sébastien Vauban
2009-12-08 16:00     ` Thomas S. Dye
2009-12-08 21:37       ` Sébastien Vauban
2009-12-08  9:58   ` Sébastien Vauban
2009-12-08 16:26     ` Dan Davison
  -- strict thread matches above, loose matches on Subject: below --
2009-12-08 22:40 Thomas S. Dye
2009-12-09  9:04 ` Sébastien Vauban

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87aaxy8czu.fsf@stats.ox.ac.uk \
    --to=davison@stats.ox.ac.uk \
    --cc=emacs-orgmode@gnu.org \
    --cc=wxhgmqzgwmuf@spammotel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).