159 votes

Renvoyer plusieurs objets dans une fonction R

Comment puis-je renvoyer plusieurs objets dans une fonction R ? En Java, je créerais une classe, peut-être Person qui a des variables privées et encapsule, peut-être, height , age , etc.

Mais dans R, j'ai besoin de faire circuler des groupes de données. Par exemple, comment puis-je faire en sorte qu'une fonction R renvoie à la fois une liste de caractères et un entier ?

36voto

RockScience Points 2341

De même en Java, vous pouvez créer une classe S4 dans R qui encapsule vos informations :

 setClass(Class="Person",
         representation(
            height="numeric",
            age="numeric"
          )
)

Ensuite, votre fonction peut renvoyer une instance de cette classe :

 myFunction = function(age=28, height=176){
  return(new("Person",
          age=age,
          height=height))
}

et vous pouvez accéder à vos informations :

 aPerson = myFunction()

aPerson@age
aPerson@height

22voto

AndresT Points 2472

Est-ce que quelque chose dans ce sens est ce que vous recherchez ?

 x1 = function(x){
  mu = mean(x)
  l1 = list(s1=table(x),std=sd(x))
  return(list(l1,mu))
}

library(Ecdat)
data(Fair)
x1(Fair$age)

6voto

Daniel Morgan Points 28

Vous pouvez également utiliser la super-affectation.

Au lieu de "<-", tapez "<<-". La fonction recherchera de manière récursive et répétée un niveau fonctionnel supérieur pour un objet de ce nom. S'il n'en trouve pas, il en créera un au niveau mondial.

4voto

fvfaleiro Points 11

Vous pouvez utiliser for() avec assign() pour créer de nombreux objets. Voir l'exemple de assign() :

 for(i in 1:6) { #-- Create objects  'r.1', 'r.2', ... 'r.6' --
    nam <- paste("r", i, sep = ".")
    assign(nam, 1:i)

À la recherche des nouveaux objets

 ls(pattern = "^r..$")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X