emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] cannot execute org-mode code from the front page tutorial.


From: Nick Dokos
Subject: Re: [O] cannot execute org-mode code from the front page tutorial.
Date: Fri, 15 Aug 2014 14:40:38 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4.50 (gnu/linux)

address@hidden (Thomas S. Dye) writes:

> Aloha Jenia,
>
> address@hidden (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 via email to

[Prev in Thread] Current Thread [Next in Thread]