2017-06-24 1 views
1

J'essaie d'utiliser apply() pour parcourir un tableau par lignes, regarder une colonne de 1 et de 0, puis remplir une autre colonne dans ce même tableau en utilisant une fonction si la première colonne est une, et une autre fonction si elle est un 0.Une instruction if à l'intérieur d'une application

donc, ce serait quelque chose comme ...

appliquent (1 résultats, si (risque = 1) {RéSultatS SuR [, " Âge "] = Fonction_1} else {OutComes [," Age "] = Function_2})

où OutComes est le tableau en question tion et risque est la variable qui détermine quelle fonction nous utilisons.

Le but est que 2 fonctions déterminent la durée de vie et que les personnes tombent dans l'une des deux catégories, chacune avec sa propre fonction. Basé sur le groupe de risque, je veux utiliser une fonction différente pour calculer l'âge, mais cela ne semble pas fonctionner. Apply() nécessite le nom d'une fonction;

+0

Je pense que «ifelse» peut être approprié à utiliser ici – Benjamin

Répondre

1

vous devez définir une fonction ici, car aucune fonction readymade n'est fournie. Exemple: apply (OutComes, 1, sum) - retourne les sommes de chaque ligne. Le nombre de sorties dans le vecteur est identique au nombre ou aux lignes. Vous pouvez donc l'affecter à une variable, puis l'ajouter par cbind ou remplacer les valeurs d'une colonne existante.

apply(OutComes, 1, function(x) { 
    if (x[n] == 1) { 
    Function_1() 
    }else { 
    Function_2() 
    }) -> new_age 
# x : is the working row at the time 
# n : column number for "risk" # or # if(x["risk"] ==1) 
# also note == instead of = at if 
OutComes = cbind(OutComes, new_age) 
#or 
OutComes$Age <- new_age