emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Nick Dokos <ndokos@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Re: cannot execute org-mode code from the front page tutorial.
Date: Fri, 15 Aug 2014 14:40:38 -0400	[thread overview]
Message-ID: <87wqa9zjdl.fsf@alphaville.bos.redhat.com> (raw)
In-Reply-To: m27g294rcd.fsf@tsdye.com

tsd@tsdye.com (Thomas S. Dye) writes:

> Aloha Jenia,
>
> jenia.ivlev@gmail.com (jenia.ivlev) writes:
>
>> Hello.
>>
>> I'm trying to go through the org-mode tutorial on its official page.
>>
>> However, I have trouble execute the code there"
>>
>>
>>     #+NAME: tbl-example-data()
>>     #+BEGIN_SRC R :results value  
>>     runif(n=5, min=0, max=1)
>>     #+END_SRC
>>     
>>     #+RESULTS: tbl-example-data
>>     |  0.565871287835762 |
>>     |  0.457158328965306 |
>>     | 0.0498181856237352 |
>>     |  0.988381117349491 |
>>     |  0.898329895688221 |
>>     
>>     
>>     
>>     #+NAME: R-mean(x)
>>     #+BEGIN_SRC R :var x=tbl-example-data
>>     mean(x)
>>     #+END_SRC
>>     
>>     
>>     
>>     
>>     #+call: R-mean(x=tbl-example-data)
>>
>>
>> It returns me:
>>
>>
>>
>>      Reference 'R-mean' not found in this buffer.
>>
>
> FWIW, this code doesn't work for me, either, using a recent Org-mode from
> git.
>
>
> For others able to help, the "org-mode tutorial on its official page"
> that Jenia refers to is
> http://orgmode.org/worg/org-contrib/babel/intro.html#spreadsheet
>

I simplified the org file that leads to the error:

--8<---------------cut here---------------start------------->8---
#+name: tbl-example-data
|               foo |
|-------------------|
| 0.996612656628713 |
| 0.148018079344183 |
| 0.560482589527965 |
| 0.329234286677092 |
|  0.99839389254339 |
    
    
    
#+BEGIN_SRC R :var x=tbl-example-data
   mean(x)
#+END_SRC

#+RESULTS:
: nil
--8<---------------cut here---------------end--------------->8---

Running it in the debugger, I think what it does is the equivalent of

--8<---------------cut here---------------start------------->8---

x <- local({con <- textConnection("0.996612656628713
0.148018079344183
0.560482589527965
0.329234286677092
0.99839389254339")
		res <- read.table(
				  con,
				  header    = FALSE,
				  row.names = NULL,
				  sep       = "\t",
				  as.is     = TRUE
				  )
		close(con)
		res})

mean(x)
--8<---------------cut here---------------end--------------->8---

and trying this on the command line, I get an error:

,----
| > x <- local({con <- textConnection("0.996612656628713
| 0.148018079344183
| 0.560482589527965
| 0.329234286677092
| 0.99839389254339")
| 		res <- read.table(
| 				  con,
| 				  header    = FALSE,
| 				  row.names = NULL,
| 				  sep       = "\t",
| 				  as.is     = TRUE
| 				  )
| 		close(con)
| 		res})
| 
| + + + + + + + + + + + + + > > x
|          V1
| 1 0.9966127
| 2 0.1480181
| 3 0.5604826
| 4 0.3292343
| 5 0.9983939
| > mean(x)
| [1] NA
| Warning message:
| In mean.default(x) : argument is not numeric or logical: returning NA
`----

[Disclaimer: from this point on, I'm mostly talking about R - I know
nothing about R]

Fumbling around with typeof(x) and help(list), I stumbled upon unlist()
and used it in the evaluation of x:

,----
| > x <- local({con <- textConnection("0.996612656628713
| 0.148018079344183
| 0.560482589527965
| 0.329234286677092
| 0.99839389254339")
| 		res <- read.table(
| 				  con,
| 				  header    = FALSE,
| 				  row.names = NULL,
| 				  sep       = "\t",
| 				  as.is     = TRUE
| 				  )
| 		close(con)
| 		unlist(res)})
| + + + + + + + + + + + + + > x
|       V11       V12       V13       V14       V15 
| 0.9966127 0.1480181 0.5604826 0.3292343 0.9983939 
| > mean(x)
| [1] 0.6065483
| > 
`----

Seems to work.

Based on this purely empirical observation, I applied this patch
to org:

--8<---------------cut here---------------start------------->8---
diff --git a/lisp/ob-R.el b/lisp/ob-R.el
index 9f4eb4b..f3338cb 100644
--- a/lisp/ob-R.el
+++ b/lisp/ob-R.el
@@ -106,7 +106,7 @@ this variable.")
        as.is     = TRUE
      )
      close(con)
-     res
+     unlist(res)
    })"
   "R code used to transfer a table defined as a variable from org to R.
 This function is used when the table contains a header.")
@@ -126,7 +126,7 @@ This function is used when the table contains a header.")
        col.names = paste(\"V\", seq_len(%d), sep =\"\")
      )
      close(con)
-     res
+     unlist(res)
    })"
   "R code used to transfer a table defined as a variable from org to R.
 This function is used when the table does not contain a header.")
--8<---------------cut here---------------end--------------->8---

and the org file at the top works. But this clearly needs to be vetted
by an R expert.

The original example needs some changes to work, mainly simplification
of the #+names:

--8<---------------cut here---------------start------------->8---
    #+NAME: tbl-example-data
    #+BEGIN_SRC R :results value  
    runif(n=5, min=0, max=1)
    #+END_SRC
    
    #+NAME: R-mean
    #+BEGIN_SRC R :var x=tbl-example-data
    mean(x)
    #+END_SRC

    #+call: R-mean(x=tbl-example-data)
--8<---------------cut here---------------end--------------->8---

And assuming this is correct, the worg page will need to be corrected
too.

--
Nick

  reply	other threads:[~2014-08-15 18:41 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-15 16:37 cannot execute org-mode code from the front page tutorial jenia.ivlev
2014-08-15 17:04 ` Thomas S. Dye
2014-08-15 18:40   ` Nick Dokos [this message]
2014-08-15 23:36     ` jenia.ivlev
2014-08-16  2:41       ` Nick Dokos
2014-08-16  2:43       ` Nick Dokos
2014-08-16 16:49     ` Charles Berry
2014-08-16 17:13       ` Thomas S. Dye
2014-08-16 21:01       ` Nick Dokos

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=87wqa9zjdl.fsf@alphaville.bos.redhat.com \
    --to=ndokos@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    /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).