Wszystkie funkcje niepierwotne mają tę samą strukturę. W pierwszym wierszu funkcji znajduje się słowo function, a następnie nawiasy otwierające i zamykające, które mogą zawierać argumenty lub nie. W większości przypadków otwarty nawias następuje po nawiasach. Zwykle treść funkcji jest umieszczana poniżej pierwszej linii, a ostatnia linia to nawias zamykający. Zwykle funkcjom przypisuje się nazwę. Na przykład:
> d.fun = function( ){
+ print(1:5)
+ }
> d.fun
function( ){
print(1:5)
}
> d.fun( )
[1] 1 2 3 4 5
W tym przykładzie najpierw funkcja jest przypisana do d.fun; następnie wyświetlana jest zawartość d.fun(); i na koniec uruchamiana jest funkcja d.fun(). Nawiasy nie są konieczne, jeśli funkcja składa się tylko z jednej instrukcji – którą można wprowadzić w tym samym wierszu co instrukcja funkcji lub w następnych wierszach. Na przykład:
> c.fun = function( ) print(1:5)
> c.fun
function( ) print(1:5)
> c.fun( )
[1] 1 2 3 4 5
Ponownie, funkcja ma przypisaną nazwę, funkcja jest wymieniona na liście i funkcja jest uruchomiona. Argumenty to obiekty używane przez funkcję, które należy wprowadzić do funkcji w momencie jej uruchomienia, chyba że argument ma wartość domyślną. Argumenty są umieszczane w nawiasach podczas tworzenia funkcji, oddzielane przecinkami. Wartość domyślna jest dostarczana przez ustawienie argumentu równego wartości. Argumenty z wartościami domyślnymi nie muszą być podawane podczas działania funkcji. Jeśli wartość nie zostanie określona, funkcja użyje wartości domyślnej. Poniżej przedstawiono przykład funkcji z dwoma argumentami, w której a nie ma wartości domyślnej i musi zostać określona, a b ma wartość domyślną 3:
> e.fun = function(a, b=3){
+ print(a:b)
+ }
> e.fun
function(a, b=3){
print(a:b)
}
> e.fun(10)
[1] 10 9 8 7 6 5 4 3
> e.fun( )
Error in a:b : ‘a’ is missing
Ponownie funkcja ma przypisaną nazwę, znajduje się na liście i uruchamia się. Zauważ, że ponieważ a jest pierwszym argumentem, a b ma wartość domyślną, a można podać bez nazwy. Przy drugiej próbie uruchomienia e.fun () nie podano argumentu dla a, więc e.fun() zwraca błąd. Często użytkownik używa nawiasów wewnątrz funkcji, aby zawrzeć grupy instrukcji, na przykład dla if, else, for, while i powtórz grupy. Musi być taka sama liczba nawiasów otwierających, co nawiasów zamykających w funkcji; w przeciwnym razie funkcja nie zostanie zapisana. Niedopasowane nawiasy kwadratowe są częstym źródłem błędów w kodzie R. Linie kodu w R (zarówno w funkcji, jak i po znaku zachęty R) mogą zostać przerwane i kontynuowane w następnym wierszu. R szuka takich rzeczy, jak nawias zamykający, nawias kwadratowy lub cudzysłów, aby oznaczyć koniec instrukcji lub jej część. Puste wiersze są legalne w funkcjach R. Ponadto każdy tekst można skomentować, umieszczając znak funta (#) przed tekstem. W wierszu wszystko wpisane po znaku funta jest ignorowane. Porada dotycząca pisania funkcji polega na tym, aby pisać fragmenty naraz, debugować na na każdym kroku i używaj mnóstwa komentarzy.