Using VS Code with Bookdown - r

I have installed the R extension for VS Code. I am creating a book with bookdown, which is an extension of RMarkdown.
There is a Knit option (Ctrl + Shift + K). By default, it runs
rmarkdown::render("path/to/current/file", encoding = 'UTF-8').
[#CarlosLuisRivera pointed out that I had render_site here, rather than render before.]
In order to make bookdown work, I just need it to run
rmarkdown::render_site() or bookdown::render_book().
The encoding is the default, so that isn't needed. bookdown. Importantly, though, there shouldn't be a filename. I can't for the life of me work out how to adjust the settings to stop it from putting the filename in.
There is a setting r.rmarkdown.knit.command. This doesn't seem to do anything when the active file is called index.Rmd. Otherwise, whatever I write there gets appended with (path/to/current/file, encoding = 'UTF-8').
Even if I could get this fixed, I wanted to use VS Code for its preview—the RStudio in-built one is poor. When I try to preview, it can't compile anything, throwing an error:
The path C:/Users/USERNAME/Documents/Maths/Teaching/ST333/LectureNotes/libs/jquery-3.6.0 does not appear to be a descendant of C:/Users/USERNAME/vscode-R/tmp/.
The log also includes
output file: C:/Users/USERNAME/.vscode-R/tmp/index.knit.md
so I guess it's trying to make it in the wrong place.
Any help would be appreciated!

Related

Is it possible to interact with elements of the RStudio IDE itself using R code?

Is it possible to interact with the RStudio application using R code inside it? I mean interactions like opening a file in a card, creating a tab for a new unsaved file or changing some text inside an opened tab.
I know a very similar thing can be obtained by just simply creating a new text file or changing its content with R but this way it doesn't interact anyway with the RStudio app itself.
Some context: I was thinking of a tool that could automate inserting some reprexes / snippets of code which could work as a line of code that, when run from a file, replaces itself with a block of code or make a new unsaved file tab and put some code inside it. And yes, I know a very similar thing can be achieved other ways (e.g. simply copying the intended code block into the clipboard) but I'm curious and exploring the possibilities.
Thanks to the link provided by Konrad Rudolph I managed to find the answer myself.
There is a package called rstudioapi built into the RStudio that allows many different functionalities and doesn't require using plugins or addins.
All the features can be found in the official manual.
Opening a new unsaved file tab with some code in it can be obtained by running:
rstudioapi::documentNew(
"example code here",
type = "r",
position = rstudioapi::document_position(0, 0),
execute = FALSE
)
Inserting code can be easily done with insertText(text = "") which inserts text at the current position of the text cursor.
Changing one line into another can be obtained with the combination of getActiveDocumentContext(), which returns among others the document content and the selection range which is basically equivalent to the cursor position. Then the changing itself can be done with modifyRange() respectively to the cursor position and/or the document content.
That allows many possibilities including for example some smoother automation of the workflow.

RMarkdown can Knit but cannot run: could not find function "read_csv"

This issue is really strange, I want to read a csv file and after getting rid of all unnecessary parts my entire code boils down to this two-liner:
library(tidyverse)
read_csv('data1.csv')
If I knit the Rmd file, it works and a new webpage opens as usual:
However, if I run it either by (1) clicking the green play button; or (2) clicking Run -> Run All button:
Then it just doesn't work (In case you are wondering whether or not there is a third line of code, I make the scope of the screenshot larger). The code is so short that I have no idea what could possibly be wrong.
Following the comment from #user12728748, I changed
read_csv('data1.csv')
to
readr::read_csv('data1.csv')
and it works! But this is still odd since my understanding is that suppose there aren't namespace conflicts prepending namespace is not needed.
Loading readr explicitly, regardless of the order, does not work since it is loaded by tidyverse already:

Shortcut control enter does not work in R script

ctrl+R no longer works for executing script lines.
This is not a hardware/keyboard problem.
I have also restarted my PC.
I have tried on a different PC.
I have recently switched from using R to using RStudio. I thought this may have something to do with it, so I opened and resaved the script in RStudio, to no effect.
Furthermore, I have created an R-Project folder and have copied the files, including the script in question, into it. Then I started R-Studio and opened the project.
I would like to post my sessionInfo(), but do not know how to do that without executing the command.
Keep in mind that I only use R for stats purposes. I don't know much about informatics or other types of programming etc., so please try to keep it simple for me. Thanks!
In addition to the solution offered above, in Rstudio, Ctrl + Enter does not work if the chunk is broken in .Rmd files.
For example, if you press CTRL + Enter on the following line (2+2), it won't work:
```{r}
2+2
``
The chunk should end three Backtick characters, not two.
The problem was that the script file (for some reason unkown to me) did not have the correct extension (.R). When I added that to the script file extension, it worked fine again.

Rstudio Global Changes: show chunk output in console via CLI?

How can I force RStudio (v1.1.383) to evaluate R chunks always in console (instead of inline) when working with Rmarkdown documents, using a script?
I know I can set up Output chunks in Console by clicking on it:
According to this RStudio support post I could also un-check 'Show output inline for all R Markdown document' under 'Tools -> Global Options...':
But, is there a way to do it from a command line?
The reason I ask is that, I often work on my university machines and they all restore to defaults after each reset. Each time when in class, we have to manually go thru menus.
Knowing how to do it via a console command would as useful as starting each of my classes with
rm(list=ls())
There's not currently an elegant way to do this. This preference is stored inside an internal RStudio state file, in %localappdata%\RStudio-Desktop\monitored\user-settings. If you're sufficiently motivated you can write a script which sets the rmd_chunk_output_inline preference, but it's going to be unpleasant.
One thing you can do is set the chunk output type in the YAML header, like this:
---
editor_options:
chunk_output_type: console
---
You could also use an R Markdown document template with this set up for you (maybe your script could write this out).
Finally, there's an open issue for this on RStudio's github page which you might comment on and/or vote for:
https://github.com/rstudio/rstudio/issues/1607

How to disable spell checking in code regions in RMD files (Markdown, knitr, R)

I am using the Vim-R-plugin to edit files containing markdown and R-code blocks such that the files can be complied using knitr. The filetype is: RMD. I have enabled spell checking. How can I disable the spell checking within the code blocks?
Spell checking is attached to certain syntax groups. Find the :syn region that covers the R code blocks, and append / edit in contains=#NoSpell.
Instead of trying to get the #NoSpell working by region, my approach is to toggle between languages.
I work in three languages which are set up to toggle with a function key where I include "nospell". This makes turning spellchecking on and off as easy as pressingt F7. When coding and writing nospell is turned on, when finalizing the edits I toggle to the appropriate language.
In fact, I find spellchecks in my code to be a plus. I make mistakes in the comment sections too, sometimes even in variable names/plot lables etc. This way you have a quick last check of all language items that are going to be visible .
I got this to work on OS X by editing the ~/.vim/syntax/R.vim and doing a search and replace of all instances of #Spell to #NoSpell. Then restarting vim. All the red underscores were gone from the code chunks but were still in the rest of the the rmarkdown.
Interestingly this has not effected the spell checking in pure R documents that have a .R extension, so I having thought I understood what I was doing perhaps I have to admit I don't fully. But at least it has turned off spell checking of the code chunks in rmarkdown (Rmd) documents while leaving it still working elsewhere in the document.

Resources