UP | HOME |

Integración de tablas de Org con R en emacs

Integración de tablas de Org con R en emacs

Para integrar tablas de Org con programación de R dentro del entorno de emacs definimos una tabla en Org y la llamamos en el bloque de programación de R.

En propiedades generales del documento, especifico lo siguiente:

#+PROPERTY: header-args:R :results output :exports both :session :eval yes

Luego defino una tabla de datos con un nombre propio. En este caso se llama amount.

#+NAME:amount
|       date | amount |
|------------+--------|
| 2022-01-30 |   55.1 |
| 2022-01-31 |   54.7 |
| 2022-02-01 |   54.5 |
| 2022-02-02 |   55.1 |
| 2022-02-03 |   54.2 |
| 2022-02-04 |   54.1 |
| 2022-02-05 |   53.9 |
| 2022-02-06 |   54.1 |

En el código de programación debemos definir la variable tabla con el nombre de la tabla de datos.

#+begin_src R :var tabla=amount 
  tabla[, 2] <-tabla[, 2] /100
  class(tabla)
  tabla
#+end_src
[1] "data.frame"
        date amount
1 2022-01-30  0.551
2 2022-01-31  0.547
3 2022-02-01  0.545
4 2022-02-02  0.551
5 2022-02-03  0.542
6 2022-02-04  0.541
7 2022-02-05  0.539
8 2022-02-06  0.541

Si queremos la tabla tal cual para manejarla en Org, ponemos las opciones :results value :colnames yes

#+name: cabecera
#+begin_src R :results value :colnames yes
  head(iris)
  #+end_src
#+RESULTS: cabecera
 | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
 |--------------+-------------+--------------+-------------+---------|
 |          5.1 |         3.5 |          1.4 |         0.2 | setosa  |
 |          4.9 |           3 |          1.4 |         0.2 | setosa  |
 |          4.7 |         3.2 |          1.3 |         0.2 | setosa  |
 |          4.6 |         3.1 |          1.5 |         0.2 | setosa  |
 |            5 |         3.6 |          1.4 |         0.2 | setosa  |
 |          5.4 |         3.9 |          1.7 |         0.4 | setosa  |

Ahora la exportamos en formato bonito. Redondeamos a dos decimales y la sacamos en formato Org table.

#+begin_src R 
  library(orgutils)
  library(data.table)
  dt <- as.data.table(tabla)
  ## Redondeamos a dos decimales las columnas numéricas
  dt[, (names(dt)[sapply(dt, is.numeric)]) := lapply(.SD, round, 2), .SDcols = sapply(dt, is.numeric)]
  orgtxt <- toOrg(data.frame(dt)) 
  ##writeLines(orgtxt, con = fichero) # Para escribir en un fichero externo
  orgtxt
#+end_src
| date       | amount |
|------------+--------|
| 2022-01-30 |   0.55 |
| 2022-01-31 |   0.55 |
| 2022-02-01 |   0.54 |
| 2022-02-02 |   0.55 |
| 2022-02-03 |   0.54 |
| 2022-02-04 |   0.54 |
| 2022-02-05 |   0.54 |
| 2022-02-06 |   0.54 |
#+begin_src R :var tabla=particiones241201 :results value :colnames yes
  head(iris)
  #+end_src