2012-02-09 4 views
1

Je souhaite transmettre une formule à une fonction, mais je ne peux pas supprimer la double citation de la chaîne de la formule. Comment pourrais-je le faire? Merci.supprimer une citation d'une chaîne pour la transformer en expression

clust_start=c(1,100) 
i <- 1 
Lambexp <- 1:99 
rank <- 1:99 
alpha <- 1:99 
d <- 1 
b <- 1:2 
ww=as.matrix(c(1:99), nrow=99) 
expression.logdens <- paste(Lambexp[rank[(clust_start[i]:(clust_start[i + 1] - 1))]],   
"*exp(", alpha[(clust_start[i]:(clust_start[i + 1] - 1))], " + bb*", ww[(clust_start[i]:  
(clust_start[i + 1] - 1)), d], " - ", b[d]*ww[(clust_start[i]:(clust_start[i + 1] - 1)),  
d], ")", sep="") 

expr.formula <- paste(expression.logdens, sep="", collapse=" + ") 

J'ai essayé expr.formula < - as.expression (expr.formula) et as.name (expr.formula), ils ne travaillaient pas.

logdens <- function(bb){ 
    y <- expr.formula  
     return(y) 
    } 
logdens(1) 
+0

@ joran Oui. Je ne veux pas passer toute la fonction logdens à c les bras de fonction() dans HI, c'est trop lent. Donc je veux juste passer le résultat calculé aux bras(). – moli

+0

Définir "lent", et peut-être nous pouvons vous conseiller si d'autres méthodes seraient plus rapides en premier lieu. –

+0

BTW, en ignorant les autres problèmes, jetez un oeil à 'call' et' do.call' –

Répondre

4

Vous voulez ceci:

logdens <- function(bb){ 
    eval(parse(text=expr.formula)) 
} 

Sortie:

> logdens(1) 
[1] 1.539673e+45 
+0

Ça marche. J'ai besoin de coller cette fonction de logdens à arms() dans le paquetage HI, donc je ne peux pas utiliser eval(), bb les samples de arms(). Merci. – moli

+0

Je ne comprends pas très bien, désolé. – jbaums

+0

Merci. J'ai modifié ma question. – moli

0

Il est aussi simple que as.formula(expr.formula) ... une fois que vous fixer votre formule pour être réellement valable;)

Questions connexes