2010-08-25 5 views
3

J'ai une question R - Je veux faire un vecteur de fonctions, puis être capable d'appeler une des fonctions par son nom. Cependant, quand j'utilise ce nom, je veux utiliser une balise qui correspond à ce nom, afin que je puisse hasarder le nom que j'utilise sans avoir à changer le code. Par exemple:En R, comment sélectionner et appliquer un élément d'un vecteur de fonctions?

#define tag 
tag<-"F" 
#define functions 
f <- function(x) print(x^2) 
g <- function(x) print(x^3) 
#define vector 
fs<-c(f,g) 
names(fs)<-c("F", "G") 
#create input data 
x<-5 
fs$F(x) 
#this gives the desired output but I want to use tag 
#that is, I want syntax which uses tag, so that which element I use from fs is flexible until tag is defined 
#e.g. I had hoped the following would work, but it doesn't 
fs[tag](x) 

Des suggestions?

Répondre

5

avec cette partie de votre code

#define vector 
fs<-c(f,g) 
names(fs)<-c("F", "G") 

vous avez créé une liste (essayez class (fs) ou str (fs))

donc l'indexation de votre dernière ligne doit être modifiée:

fs[[tag]](x) 

jouez un peu avec les index pour avoir une idée de la structure. (par exemple regarder fs, fs[1], fs[[1]] et ainsi de suite)

+4

ou dans une ligne fs <- Liste ("F" = f, "G" = g) –

+0

Merci! C'est très utile. Je suppose que je m'étais embrouillé en essayant de le désinscrire et de ne pas le faire fonctionner (puisque c'était encore une liste). – Ophedia