2017-09-27 2 views
-1
  1. Donc je veux créer une fonction qui prend un vecteur numérique comme argument, et prend la valeur max et la valeur min et calcule la différence entre. J'ai à ce point jusqu'à présent:R - Comment créer une fonction avec des vecteurs numériques comme arguments

    v <- as.numeric() minmax <- function(v){max(v)-min(v)} minmax (v)

La fonction fonctionne, mais je suis sûr qu'il ya une façon plus commode d'écrire ceci dans R

  1. Je veux ajouter un 2ème argument, appelé noNAs qui définit comment la fonction manipule ses vecteurs valeurs manquantes (NAs) et je voudrais l'avoir ainsi quand noNAs = TRUE il calcule la différence entre max et min sans y compris les valeurs NA. Je sais qu'il existe un moyen de mettre en œuvre ceci avec na.rm mais je n'ai aucune idée de comment. Je pensais comme ça, mais il ne semble pas fonctionner:

    minmax <- function(v,noNAs=T){max(v)-min(v){na.rm=TRUE}}

+2

Ce que vous voulez réaliser peut être fait avec 'diff (range (x))'. Pour la deuxième question: ce sont des trucs vraiment basiques qui couvrent littéralement tout tutoriel de niveau débutant, c'est un mauvais site pour poser ce type de question. –

+0

Cela devrait fonctionner pour la deuxième question 'minmax <- fonction (v, noNAs = T) {max (v, na.rm = noNAs) -min (v, na.rm = noNAs)}' – Niek

+0

Eh bien, je suis désolé que Je n'ai pas trouvé d'exemple pour le code que je cherchais ou rien de semblable. Je suis sûr qu'il y a un moyen de bloquer mes futurs commentaires si ça vous dérange tellement! Niek: Merci pour l'aide, Apparenlty J'étais très proche de la bonne réponse, mais je ne pouvais pas comprendre comment impulser le na.rm à la ligne. –

Répondre

1

Vous ai presque résolu votre problème en reconnaissant que na.rm est un argument qui contrôle la façon dont les valeurs manquantes sont traitées . Maintenant, vous avez juste besoin d'appliquer cette connaissance à la fois min et max.

L'avantage des fonctions est que vous pouvez transmettre vos arguments à d'autres fonctions, tout comme vous avez passé v. Ce qui suit définir ce que vous souhaitez:

minmax <- function(v, noNA = TRUE){ 
    max(v, na.rm = noNA) - min(v, na.rm = noNA) 
} 

je recommande, cependant, que vous utilisez un nom d'argument qui est familier

minmax <- function(v, na.rm = TRUE){ 
    max(v, na.rm = na.rm) - min(v, na.rm = na.rm) 
} 

Comme indiqué précédemment, vous pourriez être en mesure de simplifier votre code légèrement à l'aide

minmax <- function(v, na.rm = TRUE){ 
    diff(range(v, na.rm = na.rm)) 
} 

Enfin, je suggère que vous n'utilisez pas T en place de TRUE. T est une variable qui peut être réaffectée, donc il n'est pas toujours garanti TRUE. Par contre, TRUE est un mot réservé et ne peut pas être réaffecté. Ainsi, c'est une valeur logique plus sûre à utiliser.

+0

Merci! Il a été très difficile d'apprendre à écrire du code R juste pour mon propre intérêt et pour m'aider à faire mieux et à automatiser certaines choses que je veux comprendre. Ce genre de conseils aide toujours une tonne. J'ai une connaissance de base des commandes, mais les ajouter en un seul est la partie la plus difficile pour moi jusqu'ici. J'apprécie vraiment l'aide! –