2017-06-27 2 views
0

J'essaie d'utiliser un ifelse sur un tableau appelé "OutComes" mais cela me pose problème.ifelse r - Les longueurs x et y diffèrent

> PersonNumber Risk_Factor OC_Death OnsetAge Clinical CS_Death Cure AC_Death 
>[1,]   1   1 99.69098  NA  NA  NA NA  NA 
>[2,]   2   1 60.68009  NA  NA  NA NA  NA 
>[3,]   3   0 88.67483  NA  NA  NA NA  NA 
>[4,]   4   0 87.60846  NA  NA  NA NA  NA 
>[5,]   5   0 78.23118  NA  NA  NA NA  NA 

Maintenant, je vais essayer d'utiliser une appliquer pour analyser Risk_Factor colonne de ce tableau et appliquez l'une des deux fonctions pour remplacer la colonne de ce OnsetAge NA.

J'utilise une fonction apply -

apply(OutComes, 1, function(x)ifelse(OutComes[,"Risk_Factor"] == 1, 
             HighOnsetFunction(x), OnsetFunction(x)) 

Cependant, cette évidence ne fonctionne pas comme le ifelse lui-même ne fonctionnera pas. l'erreur étant -

Erreur dans xy.coords (x, y): 'x' et longueurs 'y' diffèrent

Je ne sais pas ce qui se passe dans ce ifelse ou ce que la Les longueurs x et y sont.

+0

Fonctions '' HighOnsetFunction' et OnsetFunction '. Pouvez-vous les partager aussi? – amonk

+0

Onsetfunction > function (x) {unlist (approx (probabilité, âge, x, ties = max) [2], use.names = F)} La fonction de début élevé est la même, juste la table de probabilité utilisée est un plus haut. – Ryan

+1

* Not * comme commentaire ... mieux élargir votre requête initiale – amonk

Répondre

1

Il y a une erreur dans votre fonction d'application. Vous appliquez une fonction avec l'argument x (une ligne de OutComes), mais ensuite dans ifelse, vous utilisez un vecteur OutComes [, "Risk_Factor"] qui est une colonne de la matrice d'origine, pas un seul nombre. Une solution simple consiste à faire

apply(OutComes, 1, function(x) ifelse(x["Risk_Factor"] == 1, 
       HighOnsetFunction(x), OnsetFunction(x))) 

Mais lorsqu'il s'agit d'un scalaire, il n'y a pas de réel besoin d'utiliser ifelse, donc il peut être plus efficace d'écrire

apply(OutComes, 1, function(x) if (x["Risk_Factor"] == 1) HighOnsetFunction(x) else OnsetFunction(x))) 
+0

Il continue à afficher l'erreur > dans xy.coords (x, y): les longueurs 'x' et 'y' diffèrent – Ryan

+0

Etes-vous sûr que ce n'est pas un erreur dans votre [Haut] OnsetFunction? Est-ce qu'ils fonctionnent bien s'ils sont appliqués à une seule rangée de vos données? –

+0

Je vais vérifier, mais la fonction OnsetFunction est effectivement utilisée plus tôt dans le code sans difficulté. La colonne OC_Death est générée à l'aide de cette fonction de début. – Ryan