---
title: "Arrow R Developer Guide"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Arrow R Developer Guide}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

If you're interested in contributing to arrow, this vignette explains our approach, 
at a high-level.  If you're looking for more detailed content, you may want to 
look at one of the following links:

* [in-depth guide to contributing to Arrow, including step-by-step examples](https://arrow.apache.org/docs/developers/guide/index.html)
* [setting up a development environment and building the components that make up the Arrow project and R package](https://arrow.apache.org/docs/r/articles/developers/setup.html)
* [common Arrow dev workflow tasks](https://arrow.apache.org/docs/r/articles/developers/workflow.html)
* [running R with the C++ debugger attached](https://arrow.apache.org/docs/r/articles/developers/debugging.html)
* [in-depth guide to how the package installation works](https://arrow.apache.org/docs/r/articles/developers/install_details.html)
* [using Docker to diagnose a bug or test a feature on a specific OS](https://arrow.apache.org/docs/r/articles/developers/docker.html)
* [writing bindings between R functions and Arrow Acero functions](https://arrow.apache.org/docs/r/articles/developers/bindings.html)

# Approach to implementing functionality

Our general philosophy when implementing functionality is to match to existing 
R function signatures which may be familiar to users, whilst exposing any 
additional functionality available via Arrow.  The intention is to allow users 
to be able to use their existing code with minimal changes, or new code or 
approaches to learn.

There are a number of ways in which we do this:

* when implementing a function with an R equivalent, support the arguments 
available in R version as much as possible - use the original parameter names 
and translate to the arrow parameter name inside the function

* if there are arrow parameters which do not exist in the R function, allow the
user to pass in those options through too

* where necessary add extra arguments to the function signature for features 
that don't exist in R but do in Arrow (e.g. passing in a schema when reading a
CSV dataset)
