Re: [O] [babel] Specified colnames

2013-04-27 Thread Eric Schulte

 Here the patch you asked for.

 Best regards,
   Seb


I've applied this patch.  Please review the changes I had to make for it
to work correctly.  Your version wasn't working because when
org-babel-execute-src-block was called the point was not inside of the
code block.  My changes search forward in the text to place the point at
the beginning of the code block before executing.

I also had to uppercase RESULTS for the string equality to return true.
In the future more flexible tests (such as regular expression searches)
rather than strict equality should be preferable.

Thanks for contributing this test!


 From aa7230ff485df5d9775429b53487aefcc7cd911d Mon Sep 17 00:00:00 2001
 From: Sebastien Vauban wxhgmqzgw...@spammotel.com
 Date: Thu, 25 Apr 2013 15:24:58 +0200
 Subject: [PATCH] Test support of explicitly specified colnames

 * test-ob.el (test-ob/specific-colnames): Add test checking that given column
 names are well present in the output table.

 ---
  testing/lisp/test-ob.el |   32 
  1 files changed, 32 insertions(+), 0 deletions(-)

 diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el
 index bbbfbc4..d51e183 100644
 --- a/testing/lisp/test-ob.el
 +++ b/testing/lisp/test-ob.el
 @@ -1106,6 +1106,38 @@ Paragraph
  (widen)
  (should (should (re-search-forward ^: 3 nil t)
  
 +(ert-deftest test-ob/specific-colnames ()
 +  Test passing specific column names.
 +  (should
 +   (equal #+name: input-table
 +| id | var1 |
 +|+--|
 +|  1 | bar  |
 +|  2 | baz  |
 +
 +#+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
 +echo \$data\
 +#+end_src
 +
 +#+results:
 +| Rev | Author |
 +|-+|
 +|   1 | bar|
 +|   2 | baz|
 +
 +
 +   (org-test-with-temp-text #+name: input-table
 +| id | var1 |
 +|+--|
 +|  1 | bar  |
 +|  2 | baz  |
 +
 +#+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
 +echo \$data\
 +#+end_src
 +
 +(org-babel-execute-src-block)
 +(buffer-string)
  
  (provide 'test-ob)
  
 -- 
 1.7.9

-- 
Eric Schulte
http://cs.unm.edu/~eschulte



Re: [O] [babel] Specified colnames

2013-04-27 Thread Sebastien Vauban
Eric,

Eric Schulte wrote:
 Here the patch you asked for.

 I've applied this patch.

Thanks a lot for reviewing my test, and fixing it!

 Please review the changes I had to make for it to work correctly. Your
 version wasn't working because when org-babel-execute-src-block was called
 the point was not inside of the code block.

Isn't there something to fix, in order to avoid an uncontrolled error to be
generated, such as the one I had?

 My changes search forward in the text to place the point at the beginning of
 the code block before executing.

OK!

 I also had to uppercase RESULTS for the string equality to return true.

OK. That's true I've set:

--8---cut here---start-8---
  ;; keep lower-case
  (setq org-babel-results-keyword results)
--8---cut here---end---8---

since we've got nice keyword fontification -- as Carsten once said, he only
choose uppercase keywords, a while ago, when it was much more difficult to
clearly view the distinction between text, code and results (before the nice
fontification we now have). Otherwise, he'd have chosen lower-case keywords.

Because of that feature, which I completely had out of my mind, I'm thinking
at another thing that could help reduce the size of the tests. Currently, we
copy once the code block, and once the code block + its results.

Maybe we could have a function to locate (via a regexp for
#+results/#+RESULTS) the results, and only check (for strict or loose
equality [1]) on the results.

So, something along those lines:

--8---cut here---start-8---
(should
 (equal (results-part (org-babel-execute-src-block code block only))
results only))
--8---cut here---end---8---

No duplication of the input...

Does this make sense?

 In the future more flexible tests (such as regular expression searches)
 rather than strict equality should be preferable.

 Thanks for contributing this test!

My pleasure.

Best regards,
  Seb

[1] Regexp match

-- 
Sebastien Vauban




Re: [O] [babel] Specified colnames

2013-04-27 Thread Eric Schulte

 OK. That's true I've set:

 --8---cut here---start-8---
   ;; keep lower-case
   (setq org-babel-results-keyword results)
 --8---cut here---end---8---


If you like you could let-bind this around any future tests.


 since we've got nice keyword fontification -- as Carsten once said, he only
 choose uppercase keywords, a while ago, when it was much more difficult to
 clearly view the distinction between text, code and results (before the nice
 fontification we now have). Otherwise, he'd have chosen lower-case keywords.

 Because of that feature, which I completely had out of my mind, I'm thinking
 at another thing that could help reduce the size of the tests. Currently, we
 copy once the code block, and once the code block + its results.

 Maybe we could have a function to locate (via a regexp for
 #+results/#+RESULTS) the results, and only check (for strict or loose
 equality [1]) on the results.

 So, something along those lines:

 --8---cut here---start-8---
 (should
  (equal (results-part (org-babel-execute-src-block code block only))
 results only))
 --8---cut here---end---8---

 No duplication of the input...

 Does this make sense?


Yes, that would be an improvement, see the other tests in that file for
examples of similar functionality.


 In the future more flexible tests (such as regular expression searches)
 rather than strict equality should be preferable.

 Thanks for contributing this test!

 My pleasure.

 Best regards,
   Seb


Cheers,


 [1] Regexp match

-- 
Eric Schulte
http://cs.unm.edu/~eschulte



Re: [O] [babel] Specified colnames

2013-04-25 Thread Sebastien Vauban
Hi Eric,

Eric Schulte wrote:
 Sebastien Vauban wxhgmqzgw...@spammotel.com writes:
 Eric Schulte wrote:
 Sebastien Vauban wxhgmqzgw...@spammotel.com writes:
 Eric Schulte wrote:
 Extra question: tested with a sh block, both of the above do work, that 
 is
 with strings or symbols. Which one is supposed to be better (that is, 
 will be
 more portable with time), if there is one?

 Both will be maintained.  The contribution of a test exercising both
 options could provide an extra guarantee of perseverance.  This is also
 a good first step towards editing the code. :)

 Here's my trial to do so [...].
 Does this correspond to what you're asking for?

 Close, could you prepare this as a patch against the current code base?
 That way I can simply apply it locally and more easily test it.

 See the above, could you prepare this as a patch so that I can more
 easily read/use/test it?

Here the patch you asked for.

Best regards,
  Seb

From aa7230ff485df5d9775429b53487aefcc7cd911d Mon Sep 17 00:00:00 2001
From: Sebastien Vauban wxhgmqzgw...@spammotel.com
Date: Thu, 25 Apr 2013 15:24:58 +0200
Subject: [PATCH] Test support of explicitly specified colnames

* test-ob.el (test-ob/specific-colnames): Add test checking that given column
names are well present in the output table.

---
 testing/lisp/test-ob.el |   32 
 1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el
index bbbfbc4..d51e183 100644
--- a/testing/lisp/test-ob.el
+++ b/testing/lisp/test-ob.el
@@ -1106,6 +1106,38 @@ Paragraph
 (widen)
 (should (should (re-search-forward ^: 3 nil t)
 
+(ert-deftest test-ob/specific-colnames ()
+  Test passing specific column names.
+  (should
+   (equal #+name: input-table
+| id | var1 |
+|+--|
+|  1 | bar  |
+|  2 | baz  |
+
+#+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
+echo \$data\
+#+end_src
+
+#+results:
+| Rev | Author |
+|-+|
+|   1 | bar|
+|   2 | baz|
+
+
+ (org-test-with-temp-text #+name: input-table
+| id | var1 |
+|+--|
+|  1 | bar  |
+|  2 | baz  |
+
+#+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
+echo \$data\
+#+end_src
+
+  (org-babel-execute-src-block)
+  (buffer-string)
 
 (provide 'test-ob)
 
-- 
1.7.9

-- 
Sebastien Vauban




Re: [O] [babel] Specified colnames

2013-04-20 Thread Eric Schulte
Sebastien Vauban wxhgmqzgw...@spammotel.com writes:

 Eric,

 Eric Schulte wrote:
 Sebastien Vauban wxhgmqzgw...@spammotel.com writes:
 Eric Schulte wrote:
 Extra question: tested with a sh block, both of the above do work, that is
 with strings or symbols. Which one is supposed to be better (that is, 
 will be
 more portable with time), if there is one?

 Both will be maintained.  The contribution of a test exercising both
 options could provide an extra guarantee of perseverance.  This is also
 a good first step towards editing the code. :)

 Here's my trial to do so [...].
 Does this correspond to what you're asking for?

 Close, could you prepare this as a patch against the current code base?
 That way I can simply apply it locally and more easily test it.


See the above, could you prepare this as a patch so that I can more
easily read/use/test it?

Thanks,


 I've fixed the abortion problem I had with the test...

 Updated version:

 --8---cut here---start-8---
 (ert-deftest test-ob/specific-colnames ()
   Test passing specific column names.
   (should
(equal #+name: input-table
 | id | var1 |
 |+--|
 |  1 | bar  |
 |  2 | baz  |

 #+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
 echo \$data\
 #+end_src

 #+results:
 | Rev | Author |
 |-+|
 |   1 | bar|
 |   2 | baz|

 
 (org-test-with-temp-text #+name: input-table
 | id | var1 |
 |+--|
 |  1 | bar  |
 |  2 | baz  |

 #+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
 echo \$data\
 #+end_src
 
  (org-babel-execute-src-block)
  (buffer-string)
 --8---cut here---end---8---

 Though, it generates an incomprehensible error (for me):

 --8---cut here---start-8---
 Debugger entered--Lisp error: (wrong-type-argument consp nil)
   apply(debug (error (wrong-type-argument consp nil)))
   ert--run-test-debugger([cl-struct-ert--test-execution-info 
 [cl-struct-ert-test test-ob/specific-colnames Test passing specific column 
 names. (lambda nil (let ((fn-802 (function equal)) (args-803 (list #+name: 
 input-table\n| id | var1 |\n|+--|\n|  1 | bar  |\n|  2 | baz  
 |\n\n#+begin_src sh :var data=input-table :exports results :colnames '(Rev 
 Author)\necho \$data\\n#+end_src\n\n#+results:\n| Rev | Author 
 |\n|-+|\n|   1 | bar|\n|   2 | baz|\n\n (let ... ... 
 (let ((value-804 (quote ert-form-evaluation-aborted-805))) (let 
 (form-description-806) (if (unwind-protect ... ... ...) nil (ert-fail 
 form-description-806))) value-804))) nil :passed nil] 
 [cl-struct-ert-test-failed nil nil (wrong-type-argument consp nil) ((t setcar 
 nil ((:comments . ) (:shebang . ) (:cache . ) (:padline . ) (:noweb . 
 ) (:tangle . ) (:exports . ) (:results . ))) (nil let* ((c (nthcdr 2 
 i))) (setcar c merged-params)) (nil let ((i info)) (let* ((c (nthcdr 2 i))) 
 (setcar c merged-params)) i) (nil org-babel-check-evaluate (let ((i info)) 
 (let* ((c ...)) (setcar c merged-params)) i)) (nil if 
 (org-babel-check-evaluate (let ((i info)) (let* (...) (setcar c 
 merged-params)) i)) (progn (let* ((params ...) (cachep ...) (new-hash ...) 
 (old-hash ...) (cache-current-p ...)) (cond (cache-current-p ...) (... 
 ...) (nil let* ((info (if info (copy-tree info) 
 (org-babel-get-src-block-info))) (merged-params (org-babel-merge-params (nth 
 2 info) params))) (if (org-babel-check-evaluate (let (...) (let* ... ...) i)) 
 (progn (let* (... ... ... ... ...) (cond ... ...) (t 
 org-babel-execute-src-block) (nil progn (org-mode) (progn (insert #+name: 
 input-table\n| id | var1 |\n|+--|\n|  1 | bar  |\n|  2 | baz  
 |\n\n#+begin_src sh :var data=input-table :exports results :colnames '(Rev 
 Author)\necho \$data\\n#+end_src\n) (goto-char (point-min))) 
 (org-babel-execute-src-block) (buffer-string)) (nil unwind-protect (progn 
 (org-mode) (progn (insert #+name: input-table\n| id | var1 
 |\n|+--|\n|  1 | bar  |\n|  2 | baz  |\n\n#+begin_src sh :var 
 data=input-table :exports results :colnames '(Rev Author)\necho 
 \$data\\n#+end_src\n) (goto-char (point-min))) 
 (org-babel-execute-src-block) (buffer-string)) (and (buffer-name temp-buffer) 
 (kill-buffer temp-buffer))) (nil save-current-buffer (set-buffer temp-buffer) 
 (unwind-protect (progn (org-mode) (progn (insert #+name: input-table\n| id | 
 var1 |\n|+--|\n|  1 | bar  |\n|  2 | baz  |\n\n#+begin_src sh :var 
 data=input-table :exports results :colnames '(Rev Author)\necho 
 \$data\\n#+end_src\n) (goto-char ...)) (org-babel-execute-src-block) 
 (buffer-string)) (and (buffer-name temp-buffer) (kill-buffer temp-buffer 
 (nil let ((temp-buffer (generate-new-buffer  *temp*))) (save-current-buffer 
 (set-buffer temp-buffer) (unwind-protect (progn (org-mode) (progn ... ...) 
 (org-babel-execute-src-block) 

Re: [O] [babel] Specified colnames

2013-04-18 Thread Sebastien Vauban
Eric,

Eric Schulte wrote:
 Sebastien Vauban wxhgmqzgw...@spammotel.com writes:
 Eric Schulte wrote:
 Extra question: tested with a sh block, both of the above do work, that is
 with strings or symbols. Which one is supposed to be better (that is, will 
 be
 more portable with time), if there is one?

 Both will be maintained.  The contribution of a test exercising both
 options could provide an extra guarantee of perseverance.  This is also
 a good first step towards editing the code. :)

 Here's my trial to do so [...].
 Does this correspond to what you're asking for?

 Close, could you prepare this as a patch against the current code base?
 That way I can simply apply it locally and more easily test it.

I've fixed the abortion problem I had with the test...

Updated version:

--8---cut here---start-8---
(ert-deftest test-ob/specific-colnames ()
  Test passing specific column names.
  (should
   (equal #+name: input-table
| id | var1 |
|+--|
|  1 | bar  |
|  2 | baz  |

#+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
echo \$data\
#+end_src

#+results:
| Rev | Author |
|-+|
|   1 | bar|
|   2 | baz|


(org-test-with-temp-text #+name: input-table
| id | var1 |
|+--|
|  1 | bar  |
|  2 | baz  |

#+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
echo \$data\
#+end_src

 (org-babel-execute-src-block)
 (buffer-string)
--8---cut here---end---8---

Though, it generates an incomprehensible error (for me):

--8---cut here---start-8---
Debugger entered--Lisp error: (wrong-type-argument consp nil)
  apply(debug (error (wrong-type-argument consp nil)))
  ert--run-test-debugger([cl-struct-ert--test-execution-info 
[cl-struct-ert-test test-ob/specific-colnames Test passing specific column 
names. (lambda nil (let ((fn-802 (function equal)) (args-803 (list #+name: 
input-table\n| id | var1 |\n|+--|\n|  1 | bar  |\n|  2 | baz  
|\n\n#+begin_src sh :var data=input-table :exports results :colnames '(Rev 
Author)\necho \$data\\n#+end_src\n\n#+results:\n| Rev | Author 
|\n|-+|\n|   1 | bar|\n|   2 | baz|\n\n (let ... ... 
(let ((value-804 (quote ert-form-evaluation-aborted-805))) (let 
(form-description-806) (if (unwind-protect ... ... ...) nil (ert-fail 
form-description-806))) value-804))) nil :passed nil] 
[cl-struct-ert-test-failed nil nil (wrong-type-argument consp nil) ((t setcar 
nil ((:comments . ) (:shebang . ) (:cache . ) (:padline . ) (:noweb . 
) (:tangle . ) (:exports . ) (:results . ))) (nil let* ((c (nthcdr 2 
i))) (setcar c merged-params)) (nil let ((i info)) (let* ((c (nthcdr 2 i))) 
(setcar c merged-params)) i) (nil org-babel-check-evaluate (let ((i info)) 
(let* ((c ...)) (setcar c merged-params)) i)) (nil if (org-babel-check-evaluate 
(let ((i info)) (let* (...) (setcar c merged-params)) i)) (progn (let* ((params 
...) (cachep ...) (new-hash ...) (old-hash ...) (cache-current-p ...)) (cond 
(cache-current-p ...) (... ...) (nil let* ((info (if info (copy-tree info) 
(org-babel-get-src-block-info))) (merged-params (org-babel-merge-params (nth 2 
info) params))) (if (org-babel-check-evaluate (let (...) (let* ... ...) i)) 
(progn (let* (... ... ... ... ...) (cond ... ...) (t 
org-babel-execute-src-block) (nil progn (org-mode) (progn (insert #+name: 
input-table\n| id | var1 |\n|+--|\n|  1 | bar  |\n|  2 | baz  
|\n\n#+begin_src sh :var data=input-table :exports results :colnames '(Rev 
Author)\necho \$data\\n#+end_src\n) (goto-char (point-min))) 
(org-babel-execute-src-block) (buffer-string)) (nil unwind-protect (progn 
(org-mode) (progn (insert #+name: input-table\n| id | var1 |\n|+--|\n| 
 1 | bar  |\n|  2 | baz  |\n\n#+begin_src sh :var data=input-table :exports 
results :colnames '(Rev Author)\necho \$data\\n#+end_src\n) (goto-char 
(point-min))) (org-babel-execute-src-block) (buffer-string)) (and (buffer-name 
temp-buffer) (kill-buffer temp-buffer))) (nil save-current-buffer (set-buffer 
temp-buffer) (unwind-protect (progn (org-mode) (progn (insert #+name: 
input-table\n| id | var1 |\n|+--|\n|  1 | bar  |\n|  2 | baz  
|\n\n#+begin_src sh :var data=input-table :exports results :colnames '(Rev 
Author)\necho \$data\\n#+end_src\n) (goto-char ...)) 
(org-babel-execute-src-block) (buffer-string)) (and (buffer-name temp-buffer) 
(kill-buffer temp-buffer (nil let ((temp-buffer (generate-new-buffer  
*temp*))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn 
(org-mode) (progn ... ...) (org-babel-execute-src-block) (buffer-string)) (and 
(buffer-name temp-buffer) (kill-buffer temp-buffer) (nil list #+name: 
input-table\n| id | var1 |\n|+--|\n|  1 | bar  |\n|  2 | baz  
|\n\n#+begin_src sh :var data=input-table :exports results :colnames 

Re: [O] [babel] Specified colnames

2013-04-12 Thread Eric Schulte
Sebastien Vauban wxhgmqzgw...@spammotel.com writes:

 Eric,

 Eric Schulte wrote:
 Extra question: tested with a sh block, both of the above do work, that is
 with strings or symbols. Which one is supposed to be better (that is, will 
 be
 more portable with time), if there is one?

 Both will be maintained.  The contribution of a test exercising both
 options could provide an extra guarantee of perseverance.  This is also
 a good first step towards editing the code. :)

 Here's my trial to do so.

 --8---cut here---start-8---
 (ert-deftest test-ob/specific-column-names-symbols ()
   Test passing specific column names as a list of symbols.
   (should
(equal #+name: input-table
 | id | var1 |
 |+--|
 |  1 | bar  |
 |  2 | baz  |

 #+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
 echo \$data\
 #+end_src

 #+results:
 | Rev | Author |
 |-+|
 |   1 | bar|
 |   2 | baz|

 
 (org-test-with-temp-text #+name: input-table
 | id | var1 |
 |+--|
 |  1 | bar  |
 |  2 | baz  |

 #+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
 echo \$data\
 #+end_src
 
  (org-babel-execute-src-block)
  (buffer-string)
 --8---cut here---end---8---

 Does this correspond to what you're asking for?


Close, could you prepare this as a patch against the current code base?
That way I can simply apply it locally and more easily test it.


 However, running it did not succeed. I must do something wrong, or NOT do
 something good...

   ╭
   │ Selector: t
   │ Passed: 0
   │ Failed: 0
   │ Total:  0/1
   │ 
   │ Started at:   2013-04-08 22:45:19+0200
   │ Aborted.
   │ Aborted at:   2013-04-08 22:45:19+0200
   │ 
   │ A
   │ 
   │ A test-ob/specific-column-names-symbols
   │ Test passing specific column names as a list of symbols.
   │ aborted
   ╰

 The worse is that I don't get a backtrace, even after:

 - setting debug-on-error to t, or
 - M-x'ing toggle-debug-on-error.

 Weird, but not the first time -- seems related to Emacs 24.2 or so (+ my
 config?).


Integration these tests with the existing tests should help to
illuminate whatever is causing these failures.  Assuming that the
existing tests are passing on your system that is.

Cheers,


 Best regards,
   Seb

-- 
Eric Schulte
http://cs.unm.edu/~eschulte



[O] [babel] Specified colnames

2013-04-08 Thread Sebastien Vauban
Hi Eric,

I'm trying to specify the column names of the table.

#+name: input
| title | baz |
|---+-|
| obs1  | foo |
| obs2  | bar |

But both versions (with symbols or strings) just do return the plain input
table.

#+name: R-echo-colnames-list
#+begin_src R :var data=input :exports results :colnames '(Rev Author)
data
#+end_src

#+name: R-echo-colnames-qlist
#+begin_src R :var data=input :exports results :colnames '(Rev Author)
data
#+end_src

Am I doing something wrong?

Best regards,
  Seb

-- 
Sebastien Vauban




Re: [O] [babel] Specified colnames

2013-04-08 Thread Eric Schulte
Sebastien Vauban wxhgmqzgw...@spammotel.com writes:

 Hi Eric,

 I'm trying to specify the column names of the table.

 #+name: input
 | title | baz |
 |---+-|
 | obs1  | foo |
 | obs2  | bar |

 But both versions (with symbols or strings) just do return the plain input
 table.

 #+name: R-echo-colnames-list
 #+begin_src R :var data=input :exports results :colnames '(Rev Author)
 data
 #+end_src

 #+name: R-echo-colnames-qlist
 #+begin_src R :var data=input :exports results :colnames '(Rev Author)
 data
 #+end_src

 Am I doing something wrong?

 Best regards,
   Seb

It looks like ob-R implements its own result table reconstruction
instead of using the general support.  This is because R actually has a
notion of column names and row names internally.  The implementation in
ob-R does not correctly handle specified colnmaes as your example shows.

The attached patch brings ob-R closer to the using the unified general
table reconstructed used in most other languages, and fixes your problem
mentioned above.  I haven't applied it however, as it may introduce
other bugs related to specifying column names from within R.  For
example, I'm not sure that it will now correctly apply column names from
a table built entirely from within R.

Additional testing by someone more familiar with R than myself would be
greatly appreciated.

Thanks,

From 680bfe22c423d5fad43348fc86eba6618f3aa57c Mon Sep 17 00:00:00 2001
From: Eric Schulte schulte.e...@gmail.com
Date: Mon, 8 Apr 2013 10:36:32 -0600
Subject: [PATCH] use org-babel-reassemble-table in ob-R

* lisp/ob-R.el (org-babel-execute:R): Use org-babel-reassemble-table to
  reconstruct tables with column and row names.
  (org-babel-R-evaluate-external-process): Don't use R-specific table
  reconstruction.
  (org-babel-R-evaluate-session): Don't use R-specific table
  reconstruction.
---
 lisp/ob-R.el | 46 ++
 1 file changed, 18 insertions(+), 28 deletions(-)

diff --git a/lisp/ob-R.el b/lisp/ob-R.el
index 67d3c37..b424f0f 100644
--- a/lisp/ob-R.el
+++ b/lisp/ob-R.el
@@ -111,13 +111,14 @@ This function is called by `org-babel-execute-src-block'.
 	   (result
 	(org-babel-R-evaluate
 	 session full-body result-type result-params
-	 (or (equal yes colnames-p)
-		 (org-babel-pick-name
-		  (cdr (assoc :colname-names params)) colnames-p))
-	 (or (equal yes rownames-p)
-		 (org-babel-pick-name
-		  (cdr (assoc :rowname-names params)) rownames-p)
-  (if graphics-file nil result
+	 (equal yes colnames-p) (equal yes rownames-p
+  (if graphics-file nil
+	(org-babel-reassemble-table
+	 result
+	 (org-babel-pick-name (cdr (assoc :colname-names params))
+			  (cdr (assoc :colnames params)))
+	 (org-babel-pick-name (cdr (assoc :rowname-names params))
+			  (cdr (assoc :rownames params
 
 (defun org-babel-prep-session:R (session params)
   Prepare SESSION according to the header arguments specified in PARAMS.
@@ -301,13 +302,11 @@ last statement in BODY, as elisp.
  FALSE)
 			   (format {function ()\n{\n%s\n}}() body)
 			   (org-babel-process-file-name tmp-file 'noquote)))
-   (org-babel-R-process-value-result
-	(org-babel-result-cond result-params
-	  (with-temp-buffer
-	(insert-file-contents tmp-file)
-	(buffer-string))
-	  (org-babel-import-elisp-from-file tmp-file '(16)))
-	column-names-p)))
+   (org-babel-result-cond result-params
+	 (with-temp-buffer
+	   (insert-file-contents tmp-file)
+	   (buffer-string))
+	 (org-babel-import-elisp-from-file tmp-file '(16)
 (output (org-babel-eval org-babel-R-command body
 
 (defun org-babel-R-evaluate-session
@@ -333,13 +332,11 @@ last statement in BODY, as elisp.
 		(if row-names-p NA TRUE)
 		  FALSE)
 		.Last.value (org-babel-process-file-name tmp-file 'noquote)))
-   (org-babel-R-process-value-result
-	(org-babel-result-cond result-params
-	  (with-temp-buffer
-	(insert-file-contents tmp-file)
-	(buffer-string))
-	  (org-babel-import-elisp-from-file tmp-file '(16)))
-	column-names-p)))
+   (org-babel-result-cond result-params
+	 (with-temp-buffer
+	   (insert-file-contents tmp-file)
+	   (buffer-string))
+	 (org-babel-import-elisp-from-file tmp-file '(16)
 (output
  (mapconcat
   #'org-babel-chomp
@@ -359,13 +356,6 @@ last statement in BODY, as elisp.
 \n))
 		 (inferior-ess-send-input)) \n
 
-(defun org-babel-R-process-value-result (result column-names-p)
-  R-specific processing of return value.
-Insert hline if column names in output have been requested.
-  (if column-names-p
-  (cons (car result) (cons 'hline (cdr result)))
-result))
-
 (provide 'ob-R)
 
 
-- 
1.8.2


-- 
Eric Schulte
http://cs.unm.edu/~eschulte


Re: [O] [babel] Specified colnames

2013-04-08 Thread Sebastien Vauban
Hi Eric,

Eric Schulte wrote:
 Sebastien Vauban wxhgmqzgw...@spammotel.com writes:
 I'm trying to specify the column names of the table.

 #+name: input
 | title | baz |
 |---+-|
 | obs1  | foo |
 | obs2  | bar |

 But both versions (with symbols or strings) just do return the plain input
 table.

 #+name: R-echo-colnames-list
 #+begin_src R :var data=input :exports results :colnames '(Rev Author)
 data
 #+end_src

 #+name: R-echo-colnames-qlist
 #+begin_src R :var data=input :exports results :colnames '(Rev Author)
 data
 #+end_src

 Am I doing something wrong?

 It looks like ob-R implements its own result table reconstruction
 instead of using the general support.  This is because R actually has a
 notion of column names and row names internally.  The implementation in
 ob-R does not correctly handle specified colnmaes as your example shows.

 The attached patch brings ob-R closer to the using the unified general
 table reconstructed used in most other languages, and fixes your problem
 mentioned above.  I haven't applied it however, as it may introduce
 other bugs related to specifying column names from within R.  For
 example, I'm not sure that it will now correctly apply column names from
 a table built entirely from within R.

Thanks for your help.

Extra question: tested with a sh block, both of the above do work, that is
with strings or symbols. Which one is supposed to be better (that is, will be
more portable with time), if there is one?

 Additional testing by someone more familiar with R than myself would be
 greatly appreciated.

Can't yet be that person, sadly. But time will come that...

Best regards,
  Seb

-- 
Sebastien Vauban




Re: [O] [babel] Specified colnames

2013-04-08 Thread Eric Schulte

 Thanks for your help.

 Extra question: tested with a sh block, both of the above do work, that is
 with strings or symbols. Which one is supposed to be better (that is, will be
 more portable with time), if there is one?


Both will be maintained.  The contribution of a test exercising both
options could provide an extra guarantee of perseverance.  This is also
a good first step towards editing the code. :)


 Additional testing by someone more familiar with R than myself would be
 greatly appreciated.

 Can't yet be that person, sadly. But time will come that...

 Best regards,
   Seb

Cheers,

-- 
Eric Schulte
http://cs.unm.edu/~eschulte



Re: [O] [babel] Specified colnames

2013-04-08 Thread Sebastien Vauban
Eric,

Eric Schulte wrote:
 Extra question: tested with a sh block, both of the above do work, that is
 with strings or symbols. Which one is supposed to be better (that is, will be
 more portable with time), if there is one?

 Both will be maintained.  The contribution of a test exercising both
 options could provide an extra guarantee of perseverance.  This is also
 a good first step towards editing the code. :)

Here's my trial to do so.

--8---cut here---start-8---
(ert-deftest test-ob/specific-column-names-symbols ()
  Test passing specific column names as a list of symbols.
  (should
   (equal #+name: input-table
| id | var1 |
|+--|
|  1 | bar  |
|  2 | baz  |

#+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
echo \$data\
#+end_src

#+results:
| Rev | Author |
|-+|
|   1 | bar|
|   2 | baz|


  (org-test-with-temp-text #+name: input-table
| id | var1 |
|+--|
|  1 | bar  |
|  2 | baz  |

#+begin_src sh :var data=input-table :exports results :colnames '(Rev Author)
echo \$data\
#+end_src

   (org-babel-execute-src-block)
   (buffer-string)
--8---cut here---end---8---

Does this correspond to what you're asking for?

However, running it did not succeed. I must do something wrong, or NOT do
something good...

  ╭
  │ Selector: t
  │ Passed: 0
  │ Failed: 0
  │ Total:  0/1
  │ 
  │ Started at:   2013-04-08 22:45:19+0200
  │ Aborted.
  │ Aborted at:   2013-04-08 22:45:19+0200
  │ 
  │ A
  │ 
  │ A test-ob/specific-column-names-symbols
  │ Test passing specific column names as a list of symbols.
  │ aborted
  ╰

The worse is that I don't get a backtrace, even after:

- setting debug-on-error to t, or
- M-x'ing toggle-debug-on-error.

Weird, but not the first time -- seems related to Emacs 24.2 or so (+ my
config?).

Best regards,
  Seb

-- 
Sebastien Vauban