Known Issues

webRoid runs R right on your phone or tablet, inside Android’s built-in browser engine. Most everyday R works just as it does on a computer, but a few things work differently here, or not at all. This page lists them, with what you can do instead.

Don’t see your issue here? Open a new issue on GitHub. If something goes wrong in the app, sending a diagnostic report helps us find out why.

Running code

Once R starts a command, it can’t be stopped partway through. A slow command finishes on its own; for one that never will, tap Restart R, which starts an empty session. See Can I interrupt running code?.

Shiny, R Markdown and knitr don’t work, because they need a web server or other programs running alongside R. Use R on a computer for these.

system() and system2() don’t work, because R has no command line to pass a command to. Neither do mclapply() and parallel::mcparallel(), but lapply() does the same work one piece at a time.

Packages

Not every CRAN package can be installed. webRoid installs from the webR repository, which holds CRAN packages rebuilt to run here, and a package that relies on software outside R, such as rJava, may not be there. To check, open Packages > Browse and search for it. See Browsing the Repository.

Running install.packages() for a package you already have doesn’t update it. To get a newer version, open the package’s menu on the Packages screen, choose Remove, and then install it again.

An app update that brings a new version of webR removes the packages you installed, because they were made for the old one. A notice lists them, with a Reinstall button. See Why do I have to reinstall my packages after an update?

If Android clears webRoid’s cache when storage runs low, your packages come back by themselves from your storage folder. The next start is just slower. See Packages Across Launches.

Large sets of packages, such as the full tidyverse, can take a while to install. A bundle is a quicker way to get started. See Package Bundles.

Getting data from the internet

Base R can read data from the web. download.file(), url(), readLines(url(...)) and read.csv() on a web address all work, and so does install.packages().

R can only read from websites that allow web pages to read from them (web developers call this CORS). Some do, such as raw.githubusercontent.com, where GitHub’s raw file links point. Others don’t, such as cran.r-project.org. If a download stops with “cannot open the connection”, this is usually why. Try the same file from a site that allows it.

The curl package doesn’t work, and neither do packages built on it, such as httr and httr2. They install and load, but their requests stop with “Timeout was reached”, because curl needs a feature Android’s browser engine doesn’t offer. webroid_enable_curl_shim() can sometimes help a package that only reads a web address, but please read What is webroid_enable_curl_shim()? first, because it can quietly return the wrong answer.

When a site won’t allow it, or you need more than a plain download, such as signing in, get the data on a computer and copy the file onto your device.

Typing and editing code

Some Android keyboards type curly quotes (“like this”), which R doesn’t understand. webRoid straightens them in the Console and in any code you run, but the Editor keeps them in the saved file, so source() on that file stops with an error. Replace them with straight quotes and save again. The "" button on the R keyboard toolbar always types straight quotes.

Quotes you meant to keep inside text are straightened too, so "She said “hi”" causes an error. Put single quotes around the text instead: 'She said "hi"'.

The Editor opens files up to 1 MB. For a larger CSV, TSV or Excel file, use Import Dataset instead (see Data Import Wizard).

The Editor keeps a recovery copy of your open tabs in case the app closes unexpectedly, but that isn’t a save. Please save before you close the app. See Opening and saving files.

Plots

Interactive plots, from packages such as DT, plotly and leaflet, appear on the Interactive tab of the Plots screen. webRoid shows one per command, and only when the plot is the command’s result, so a plot inside print() or a loop is missed. Run each one as its own command, such as leaflet() rather than print(leaflet()). See Interactive Plots.

Memory

R can only use the memory your device has, so large datasets, complex models and lots of plots can slow the app down. How much memory can R use? lists ways to free some up.

When memory runs low, most often while webRoid is in the background, Android may close R and you’ll see R Session Stopped. Your files are safe; tap Restart R and run your script again. See What does “R Session Stopped” mean?

Files and storage

Files your R code writes, for example with write.csv(), ggsave() or download.file(), stay inside R until they are copied to your storage folder, and are lost when R restarts. To keep them, choose Copy Files Back from R from the three-dot menu on the Files screen, or turn on Copy Files Back Automatically in Settings > R Session. Files over 10 MB aren’t copied back. See Files and R.

Files over 5 MB in your project don’t reach R, and R takes in only the first 50 MB of a project, smallest files first. The Console tells you when files are left out.

If your storage folder is moved or deleted, or webRoid loses access to it, the app asks you to set up storage again. See Storage Location.

If you use app storage, uninstalling webRoid deletes your projects too, so copy them somewhere else first. See Should I use app storage or choose a folder?

Start-up and Android version

The first time you open webRoid, R takes about 5 to 15 seconds to start. Later starts are quicker. webRoid needs Android 15 or newer.