R Language
Fonctions d'écriture en R
Recherche…
Fonctions nommées
R est plein de fonctions, c’est après tout un langage de programmation fonctionnel , mais parfois les fonctions précises dont vous avez besoin ne sont pas fournies dans les ressources de base. Vous pourriez peut-être installer un paquet contenant la fonction, mais peut-être que vos exigences sont tellement spécifiques qu'aucune fonction prédéfinie ne correspond à la facture? Ensuite, vous avez la possibilité de créer le vôtre.
Une fonction peut être très simple, au point d'être pratiquement inutile. Il n'a même pas besoin de prendre argument:
one <- function() { 1 }
one()
[1] 1
two <- function() { 1 + 1 }
two()
[1] 2
Ce qui est entre les accolades { }
est la fonction proprement dite. Tant que vous pouvez tout adapter à une seule ligne, ils ne sont pas strictement nécessaires, mais peuvent être utiles pour organiser les choses.
Une fonction peut être très simple, mais hautement spécifique. Cette fonction prend en entrée un vecteur ( vec
dans cet exemple) et produit le même vecteur avec la longueur du vecteur (6 dans ce cas) soustraite de chacun des éléments du vecteur.
vec <- 4:9
subtract.length <- function(x) { x - length(x) }
subtract.length(vec)
[1] -2 -1 0 1 2 3
Notez que length()
est en soi une fonction pré-fournie (ie Base ). Vous pouvez bien sûr utiliser une fonction déjà créée par vous-même dans une autre fonction auto-créée, affecter des variables et effectuer d'autres opérations en couvrant plusieurs lignes:
vec2 <- (4:7)/2
msdf <- function(x, multiplier=4) {
mult <- x * multiplier
subl <- subtract.length(x)
data.frame(mult, subl)
}
msdf(vec2, 5)
mult subl
1 10.0 -2.0
2 12.5 -1.5
3 15.0 -1.0
4 17.5 -0.5
multiplier=4
s'assure que 4
est la valeur par défaut du multiplier
argument, si aucune valeur n'est donnée lors de l'appel de la fonction 4
est ce qui sera utilisé.
Ce qui précède sont tous des exemples de fonctions nommées , appelées simplement parce qu'elles ont reçu des noms ( one
, two
, subtract.length
etc.)
Fonctions anonymes
Une fonction anonyme, comme son nom l’indique, n’a pas de nom. Cela peut être utile lorsque la fonction fait partie d'une opération plus importante, mais en soi ne prend pas beaucoup de place. Un cas d'utilisation fréquent pour les fonctions anonymes se trouve dans la famille *apply
des fonctions de base.
Calculez la moyenne quadratique pour chaque colonne d'un data.frame
:
df <- data.frame(first=5:9, second=(0:4)^2, third=-1:3)
apply(df, 2, function(x) { sqrt(sum(x^2)) })
first second third
15.968719 18.814888 3.872983
Créez une séquence de longueur par pas du plus petit au plus grand pour chaque ligne d'une matrice.
x <- sample(1:6, 12, replace=TRUE)
mat <- matrix(x, nrow=3)
apply(mat, 1, function(x) { seq(min(x), max(x)) })
Une fonction anonyme peut également être autonome:
(function() { 1 })()
[1] 1
est équivalent à
f <- function() { 1 })
f()
[1] 1
Extraits de code RStudio
Ceci est juste un petit hack pour ceux qui utilisent souvent des fonctions auto-définies.
Tapez "fun" RStudio IDE et tapez TAB.
Le résultat sera un squelette d'une nouvelle fonction.
name <- function(variables) {
}
On peut facilement définir leur propre modèle d'extrait, c'est-à-dire comme celui ci-dessous
name <- function(df, x, y) {
require(tidyverse)
out <-
return(out)
}
L'option est Edit Snippets
dans le menu Global Options -> Code
.
Passer des noms de colonnes comme argument d'une fonction
Parfois, on aimerait transmettre des noms de colonnes d'un bloc de données à une fonction. Ils peuvent être fournis sous forme de chaînes et utilisés dans une fonction en utilisant [[
. Jetons un coup d'oeil à l'exemple suivant, qui imprime à la console R des statistiques de base des variables sélectionnées:
basic.stats <- function(dset, vars){
for(i in 1:length(vars)){
print(vars[i])
print(summary(dset[[vars[i]]]))
}
}
basic.stats(iris, c("Sepal.Length", "Petal.Width"))
À la suite de l'exécution du code ci-dessus, les noms des variables sélectionnées et leurs statistiques récapitulatives de base (minima, premiers quantiles, médianes, moyennes, troisième quantiles et maxima) sont imprimés dans la console R. Le code dset[[vars[i]]]
sélectionne l' élément i-ème des arguments vars
et sélectionne une colonne correspondante dans les données d'entrée définies déclarées dset
. Par exemple, déclarer iris[["Sepal.Length"]]
seul Sepal.Length
colonne Sepal.Length
partir du jeu de données du iris
en tant que vecteur.