2012-10-28 15 views
7

Angenommen, zu testen, habe ich eine Liste:Mit lapply mit, wenn jedes Element in einer Liste

alist<- list(4,6,8,9) 

I-Test will, wenn jedes Listenelement größer als 7 ist und eine Liste von 1, wenn ihre wahren und 0 zurückgeben, wenn falsch.

Allerdings muss ich lapply verwenden.

lapply(alist,if,>7,1) or lapply(alist,if,cond>7,1) 

Natürlich funktioniert keiner von diesen und ich bekomme immer den folgenden Fehler.

Error: unexpected ',' in "lapply(alist, if," 
+0

Ich weiß, dass Sie 'lapply' verwenden möchten, aber:' as.numeric (alist> 7) 'funktioniert gut. –

+3

"muss' lapply' "==" dumme Hausaufgabe "verwenden? –

+0

Ha ha yip Carl du hast es genagelt. Ich hatte ungefähr 30% des Weges, um die Aufgabe herauszufinden, als ich darauf stieß. Ich dachte, es war eine gute Frage, wie es sich für lapply gehört ... als Argument und ich dachte mir, irgendwo könnte ich die if-Anweisung beenden. – user1181337

Antwort

17

Es schmerzt mich, dies zu beantworten, weil es sehr un R ist, dies zu tun. Sie könnten versuchen, expliziter und Klammern zu sein verwenden, wie in:

lapply(alist, function(x) if (x > 7) {1} else {0}) 

Oder die vektorisiert ifelse

lapply(alist, function(x) ifelse(x > 7, 1, 0)) 

Oder das Beste:

as.numeric(alist > 7) 
+0

+1 wie meine Antwort, aber ich würde notieren, dass ifelse() etwas unintuitiv ist, da dies ein neuer R-Benutzer zu sein scheint. Komisch, dass ich das sage, weil die unmittelbare Frage davor war, dass sich jemand über einen Abschlussfehler mit ifelse() lol beschwerte. –

+0

Sie sind sehr korrekt (IMO) über 'ifelse'. Ich habe auch am letzten Abend geantwortet und 'ifelse' Problem (wenn der Benutzer' if() {} else {} ') hätte benutzen sollen –

2

Eine weitere zwei:

lapply(alist > 7, as.integer) 

oder

lapply(alist > 7, ifelse, 1, 0) 
Verwandte Themen