2010-09-23 3 views
1

J'ai une fonction qui nécessite à la fois un objet S4 et une trame de données en tant qu'arguments.Comment passe-t-on plusieurs types de données dans llply?

Mais des fonctions telles que lapply et llply n'autorisent qu'une seule liste et une seule fonction. exemple: new_list=llply(list, function)

je pourrais faire une liste unique avec une alternance objet S4 et des données, mais llply poussera un élément de la liste à un moment qui signifie qu'il sera soit l'objet S4 ou les données (la fonction ne peut pas effectuer avec juste un ou l'autre).

Dans un certain sens, ce que je cherche s'apparente à une liste 2D (où chaque ligne a l'obj et les données S4 et une rangée est poussée à la fois).

Alors, comment pourrais-je faire ce travail?

Voici une version plus générale de mon problème. Si j'ai une fonction comme ceci:

foobar <- function(dat, threshold=0.5, max=.99) 
{ 
... 
} 

et je voulais pousser une liste par cette fonction, je pouvais faire:

new_list=llply(list, foobar) 

mais si je voulais aussi passer une valeur non par défaut pour seuil ou max, comment ferais-je dans ce contexte?

+0

Avez-vous regardé 'mlply'? – hadley

Répondre

0

Peut être que vous pouvez essayer:

Faire chaque élément de liste elle-même une liste, qui contient un objet S4 et une trame de données. Juste une suggestion, je ne suis pas sûr si cela fonctionne.

1

Les fonctions telles que lapply ont généralement un paramètre ... d'arguments transmis à la fonction. Par exemple:

lapply(list, foobar, somearg='nondefaultvalue') 

Si vous avez plusieurs paramètres variables (par exemple une valeur somearg différente pour chaque élément list), alors vous soit les emballer sous forme de paires dans une liste, ou se tourner vers une fonction comme mapply:

mapply(foobar, list, somearg=c('vectorof', 'nondefault', 'values') 
Questions connexes