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.

entrer la description de l'image ici

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.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow