Feature Request from Doug Martin and Tom Philips

Paul A. Rubin parubin73 at gmail.com
Mon Jan 18 23:17:36 UTC 2021

On 1/18/21 5:12 PM, Richard Kimberly Heck wrote:
> On 1/18/21 2:49 PM, Paul A. Rubin wrote:
>> On 1/18/21 2:03 PM, Doug Martin wrote:
>>> On Mon, Jan 18, 2021 at 10:41 AM Scott Kostyshak <skostysh at lyx.org 
>>> <mailto:skostysh at lyx.org>> wrote:
>>>     On Mon, Jan 18, 2021 at 07:25:42PM +0100, Jean-Marc Lasgouttes
>>>     wrote:
>>>     > Le 14/01/2021 à 05:34, Doug Martin a écrit :
>>>     > > JMarc and all,
>>>     > >
>>>     > > Tom and I use knitr extensively for R code chunks, and we
>>>     mostly use
>>>     > > kable with kableExtra to make tables.
>>>     > > The input to kable are R data frames, or data.tables, which
>>>     are the
>>>     > > result of model fitting and related calculations.
>>>     > > But we like to put mathematical expressions in selected
>>>     cells of tables,
>>>     > > which is so easy with LYX tables, and we currently
>>>     > > have to make the data entry into LYX by hand from data
>>>     tables and
>>>     > > data.tables in order to make use of that feature.
>>>     > > So it would be great if we could import R data tables and
>>>     data.tables
>>>     > > into LYX tables, rather than using the kable/kableExtra
>>>     > > solution for our tables  (maybe I didn't make that clear in
>>>     my earlier
>>>     > > email).  Then we would probably would drop use of
>>>     > > kable/kableExtra.
>>>     >
>>>     > So you want to import as .tex the result of R processing. This
>>>     can be done
>>>     > via "Paste from LaTeX". What would be missing for your
>>>     intended usage?
>>>     From what I understand, they would like to import a .Rds file
>>>     without
>>>     having to manually convert it to LaTeX.
>>> Scott,
>>> Definitely correct on the "without" part.  But we want to directly 
>>> import an R object
>>> of class data.frame or data.table into an LYX table.
>>> If we have to export such an object first, we would typically export 
>>> it to an .Rda object.
>>> But it would be far more convenient to not have to do that.
>>> Doug
>>>     Scott
>>> -- 
>>> R. Douglas Martin
>>> Professor Emeritus in Applied Mathematics and Statistics
>>> Founder and Former Director of MS-CFRM Program
>>> depts.washington.edu/compfin/ <http://depts.washington.edu/compfin/>
>>> University of Washington
>> Doug,
>> I'm not sure that what you want (direct import without first 
>> exporting) is possible. Keep in mind that the source data frames / 
>> tables live inside an R session, to which LyX probably does not have 
>> access. So I'm pretty sure you will need to manually export the R 
>> objects, either by saving to .Rda files (and then importing them into 
>> a LyX document using a converter) or by running an R function/script 
>> that converts them to LaTeX or LyX source (or something else LyX can 
>> ingest).
> Presumably one could script the R session itself so that the needed 
> object was exported? I.e., can one do that from the command line? 
> That's the kind of thing that an external template would do.
> Riki

What do you have in mind by "external template"? Definitely you can 
export objects from within the R session, whether it is done by entering 
a line of code at the command line, or adding code to a script or 
notebook, or doing something interactive from within a Shiny web 
interface or an IDE. It seems they are currently doing that now (with 
kable()). What I don't think is possible is to have both LyX and an R 
session running, go to LyX, and run a command sequence or script that 
would say "go into my R session, grab the data frame named 'results', 
and import it as a LyX table". Specifically, I don't think the "go into 
my R session" part is doable.

With the right stuff installed, I think a viable option is to use the 
clipboard. I'll use the (in)famous iris data frame (which comes 
preinstalled in R) as an example. Assume that I have both R and LyX 
open, and the 'clipr' and 'xtable' R packages loaded. The command 
'write_clip(capture.output(xtable(iris)))' formats the iris data frame 
as a LaTeX table and crams it into the system clipboard. In the LyX 
document, Edit > Paste Special > Paste from LaTeX imports it as a table 
(in a float inset, which can be dissolved if not wanted). The R command 
can be made into a function that can be loaded automatically when an R 
session starts, and I'm pretty sure I could turn it into an add-in with 
a shortcut in RStudio. Note that this would not require any changes to LyX.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lyx.org/pipermail/lyx-devel/attachments/20210118/6fab3aaa/attachment-0001.html>

More information about the lyx-devel mailing list