Dear list, I'd like to create several tables from R and export those to a LaTeX document. Because only input variable differs for the R code that generates the tables, I thought I could use the :post header argument to add the #+ATTR_LATEX: line I need to each of the outputs of my R source code blocks.
I tried to follow the Org manual (section 14.8.2.27), but that doesn't seem to work. My R results blocks all get colons in front of the output and if I set :results drawer, I get the following error: org-babel-R-evaluate-session: Wrong type argument: listp, followed by a double quoted string containing the data, excluding the #+ATTR_LATEX line. I have attached an example Org file that illustrates what I am trying to achieve and where it goes wrong. I tested this using Emacs 26.1 of 2018-05-29 and Org 9.1.13 from elpa (2018-06-25). In short, I'm trying the following: #+name: attr_wrap #+begin_src R :var data="" :results output cat("#+ATTR_LATEX: :environment tabularx :width \\textwidth :align Xrrr", "\n") data #+end_src #+name: create_table2 #+begin_src R :rownames yes :colnames yes :var brand="Mazda" :post attr_wrap(data=*this*) mtcars[grepl(brand, rownames(mtcars)), c("mpg", "cyl", "disp")] #+end_src And call it: #+call: create_table2(brand="Toyota") #+RESULTS: : #+ATTR_LATEX: :environment tabularx :width \textwidth :align Xrrr : X mpg cyl disp : 1 Toyota Corolla 33.9 4 71.1 : 2 Toyota Corona 21.5 4 120.1 Note that the whole results block is preceded by a colon, instead of the table being formatted by Org. Thanks for any help! Best regards, Lennart. -- *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* L.C. Karssen 's-Hertogenbosch The Netherlands lenn...@karssen.org http://blog.karssen.org GPG key ID: A88F554A -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
#+TITLE: Testing the :post header arg # Set some Org Babel values for the whole document #+PROPERTY: header-args:R :session *myR* * Introduction In this document I explore the use of the =:post= header argument for Org mode source code blocks. My aim is to create several tables for export to LaTeX and have the =ATTR_LATEX= blocks automatically added to the output of the source code blocks. For these tests we wil use the =mtcars= data set that comes with R. * Testing the =:post= header argument The following block is supposed to be used in a =:post= call to set the =ATTR_LATEX= line. #+name: attr_wrap #+begin_src R :var data="" :results output cat("#+ATTR_LATEX: :environment tabularx :width \\textwidth :align Xrrr", "\n") data #+end_src The idea is to use this as a named src block so it can be reused for each table I want to create (here still without =:post= to show the regular output). #+name: create_table #+begin_src R :rownames yes :colnames yes :var brand="Mazda" mtcars[grepl(brand, rownames(mtcars)), c("mpg", "cyl", "disp")] #+end_src This works using =#+call:=: #+call: create_table(brand="Hornet") #+RESULTS: | | mpg | cyl | disp | |-------------------+------+-----+------| | Hornet 4 Drive | 21.4 | 6 | 258 | | Hornet Sportabout | 18.7 | 8 | 360 | Define a slightly different src block that actually uses the =:post= header argument: #+name: create_table2 #+begin_src R :rownames yes :colnames yes :var brand="Mazda" :post attr_wrap(data=*this*) mtcars[grepl(brand, rownames(mtcars)), c("mpg", "cyl", "disp")] #+end_src And call it: #+call: create_table2(brand="Toyota") #+RESULTS: : #+ATTR_LATEX: :environment tabularx :width \textwidth :align Xrrr : X mpg cyl disp : 1 Toyota Corolla 33.9 4 71.1 : 2 Toyota Corona 21.5 4 120.1 Note that the whole results block is preceded by a colon, instead of being formatted by Org. Using the Shell code from the Org manual doesn't work either, it adds a comma in front of the =#+ATTR_LATEX= line. #+name: attr_wrap2 #+begin_src sh :var data="" :results output echo "#+ATTR_LATEX: :environment tabularx :width \\textwidth :align Xrrr" echo "$data" #+end_src New =create_table= function: #+name: create_table3 #+begin_src R :rownames yes :colnames yes :var brand="Mazda" :post attr_wrap2(data=*this*) mtcars[grepl(brand, rownames(mtcars)), c("mpg", "cyl", "disp")] #+end_src And call it: #+call: create_table3(brand="Toyota") #+RESULTS: : #+ATTR_LATEX: :environment tabularx :width \textwidth :align Xrrr : Toyota Corolla 33.9 4 71.1 : Toyota Corona 21.5 4 120.1 Observe that now the column names have completely disappeared.
signature.asc
Description: OpenPGP digital signature