2017-06-27 1 views
0

Ich versuche eine ifelse auf einem Array namens "OutComes" zu verwenden, aber es gibt mir einige Probleme.ifelse r - x und y Längen unterscheiden sich

> 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 

Jetzt werde ich versuchen, eine Anwendung zu verwenden, den Tabellen Risk_Factor Spalte zu analysieren und eine von zwei Funktionen gelten die OnsetAge Spalte der NA zu ersetzen.

Ich habe mit einer apply Funktion -

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

dies jedoch offensichtlich nicht als ifelse Arbeit selbst wird nicht funktionieren. der Fehler Wesen -

Fehler in xy.coords (x, y): 'x' und 'y' Längen abweichen

Ich bin mir nicht sicher, was in diesem ifelse vor sich geht oder was die x und y Längen sind.

+0

Funktionen 'HighOnsetFunction' und' OnsetFunction '. Kannst du sie auch teilen? – amonk

+0

Onsetfunction > Funktion (x) {unlist (approx (Wahrscheinlichkeit, Alter, x, Gleichheit = max) [2], use.names = F)} Hohe Onset-Funktion ist die gleiche, nur die Wahrscheinlichkeitstabelle ist es ein höheres. – Ryan

+1

* Nicht * als Kommentar ... besser erweitern Sie Ihre erste Anfrage – amonk

Antwort

1

Es liegt ein Fehler in der Anwendungsfunktion vor. Sie wenden eine Funktion mit dem Argument x (eine Zeile OutComes) an, aber dann verwenden Sie einen Vektor OutComes [, "Risk_Factor"], der eine Spalte der ursprünglichen Matrix ist, keine einzelne Zahl. Eine einfache Lösung ist zu tun

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

Aber wenn sie mit einem Skalar zu tun, gibt es keine wirkliche Notwendigkeit zu verwenden ifelse, so kann es effizienter sein, schreiben

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

Es ist immer noch die > Fehler in xy.coords (x, y): 'x' und 'y' Längen unterscheiden sich – Ryan

+0

Sind Sie sicher, dass dies nicht ist Fehler in Ihrer [High] OnsetFunction? Funktionieren sie OK, wenn sie auf eine einzelne Zeile Ihrer Daten angewendet werden? –

+0

Ich werde überprüfen, aber die OnsetFunction wird tatsächlich früher im Code ohne Schwierigkeit verwendet. Die OC_Death-Spalte wird mit dieser Onset-Funktion generiert. – Ryan

Verwandte Themen