Read and Write from the System Clipboard

Simple utility functions to read from and write to the Windows, OS X, and X11 clipboards.

CRANstatus. Downloads, grandtotal Travis-CIBuildStatus AppVeyor BuildStatus CoverageStatus

Simple utility functions to read and write from the system clipboards of Windows, OS X, and Unix-like systems (which require either xclip or xsel.)


Install from CRAN


Or try the development version



#> Welcome to clipr. See ?write_clip for advisories on writing to the clipboard in R.
cb <- read_clip()

clipr is pipe-friendly, and will default to returning the same object that was passed in.

res <- write_clip(c("Text", "for", "clipboard"))
#> [1] "Text"      "for"       "clipboard"

To capture the string that clipr writes to the clipboard, specify return_new = TRUE. Character vectors with length > 1 will be collapsed with system-appropriate line breaks, unless otherwise specified

cb <- write_clip(c("Text", "for", "clipboard"), return_new = TRUE)
#> [1] "Text\nfor\nclipboard"
cb <- write_clip(c("Text", "for", "clipboard"), breaks = ", ", return_new = TRUE)
#> [1] "Text, for, clipboard"

write_clip also tries to intelligently handle data.frames and matrices, rendering them with write.table so that they can be pasted into a spreadsheet like Excel.

tbl <- data.frame(a = c(1, 2, 3), b = c(4, 5, 6))
cb <- write_clip(tbl, return_new = TRUE)
#> [1] "a\tb\n1\t4\n2\t5\n3\t6"

read_clip_tbl will try to parse clipboard contents from spreadsheets into data frames directly.

Developing with clipr

See the “Developing with clipr” vignette included with this package for advisories on writing code that calls clipr functions.

Nice uses of clipr

(a non-comprehensive list)

  1. reprex by @jennybc takes R code on the clipboard and renders a reproducible example from it, ready to then paste on to GitHub, Stack Overflow, or the like.
  2. datapasta by @milesmcbain eases the copying and pasting of R objects in and out of different sources (Excel, Google Sheets).

Matthew Lincoln


clipr 0.6.0

Thank you to @wangyuchen for making the following suggestions:

  • To make clipr more pipe-friendly, write_clip() now defaults to return_new = FALSE, and will instead return the initial object that was passed in. To get the old behavior, pass return_new = TRUE

  • In an effort to make write_clip() and read_clip_tbl() more symmetrical, write_clip() now defaults to writing out row and column names when they exist.

  • Introduces write_last_clip(), a wrapper function for write_clip(.Last.value)

clipr 0.5.0

  • To comply with CRAN policy, write_clip() will now error by default if run in a non-interactive session. Non-interactive use must be explicitly enabled by setting an environment variable CLIPR_ALLOW=TRUE.

  • Documented that the default behavior when writing matrices to write_clip() is col.names = FALSE

clipr 0.4.1

  • Correct a formatting error by adding and separation character to tables when they are being written with rownames.

clipr 0.4.0

  • Introduces dr_clipr(), which gives informative suggestions for software and configuration requirements when accessing the clipboard on X11-based systems.

clipr 0.3.3

  • Due to poor testing and configuration options, clipr was not delivering on its promised support for xsel :( This has now been fixed, with more complete Travis tests, and some core fixes by @milesmcbain.

clipr 0.3.2

  • Suppress an erroneous warning on OS X / X11 systems when trying to write an empty string to the clipboard.

  • Fix error when NA is passed to write_clip(). This will now write "NA" to the clipboard.

  • Fix error when passing NULL or an empty vector (e.g. character(0)). This will now write "" to the clipboard.

clipr 0.3.1

  • Fixes a breaking bug that caused clipr_available to erroneously return FALSE. Thank you to @krivit for catching this.

  • Introduces better testing of clipr_available to properly evaluate it on Travis CI.

clipr 0.3.0

  • Introduces clipr_available which checks to see if the system clipboard is writeable/readable. This may be useful if you are developing a package that relies on clipr and need to ensure that it will skip tests on machines (e.g. CRAN, Travis) where the system clipboard may not be available. Thank you to @jennybc for this suggestion.

    • Implements genuine testing of clipr functionality with thanks to some deft environment variable settings added by @jennybc.

    • Two Rstudio addins: one to copy the value returned when a highlighted expression is evaluated, and another that copies the console output.

    ## clipr 0.2.1

    • Introduces read_clip_tbl, a convenience function that takes tab-delimited text from read_clip (such as that copied from a spreadsheet) and parses it with read.table. Thank you to Steve Simpson (@data-steve) for the original PR.

    • write_clip(object_type = "table") has a new internal implementation (writing to a temporary file rather than using capture.output) which should dramatically shorten the time it takes to write very large tables to the clipboard. Thank you to @r2evans for this suggestion.

    ## clipr 0.2.0

    • Several changes to write_clip - The separator to be used when writing a character vector can now be explicitly declared using breaks. breaks=NULL will default to system-specific line breaks for both vectors and tables. - write_clip will default to formatting data.frames and matrices with write.table, allowing easy pasting of tabular objects into programs like Excel. Option object_type="auto" will check the object type to decide on the correct formatting, or the user may explicitly state object_type="table" or object_type="character". - clipr will default to sane system-specific options for write.table(), however you may pass any custom desired options via write_clip - return_new=TRUE (the default behavior) will return the formatted character string that was passed to the system clipboard, while write_clip(return_new=FALSE) will return the original object.

    • Introduces clear_clip, a wrapper function for write_clip("") for easy clearing of the system clipboard.

    ## clipr 0.1.1

    • Bug fix that removes the explicit test for "Linux" in favor of a check for "xclip" or "xsel"

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.7.1 by Matthew Lincoln, a year ago

Report a bug at

Browse source code at

Authors: Matthew Lincoln [aut, cre] , Louis Maddox [ctb] , Steve Simpson [ctb] , Jennifer Bryan [ctb]

Documentation:   PDF Manual  

GPL-3 license

Imports utils

Suggests covr, knitr, rmarkdown, rstudioapi, testthat

System requirements: xclip ( or xsel ( for accessing the X11 clipboard

Imported by ARTofR, AdhereRViz, Claddis, allcontributors, carbonate, ch, corx, ctrdata, datacleanr, datapasta, details, gitignore, matahari, packagefinder, portalr, rawr, rde, readr, reprex, sendgridr, urlshorteneR, usethis, vegalite, xpectr.

Suggested by DBItest, boxr, circle, coveffectsplot, exampletestr, ggeasy, hrbrthemes, httr2, idiogramFISH, leafem, meltr, projmgr, rio, rstudioapi, shinymeta, tremendousr, workflowr.

See at CRAN