2012-10-28 11 views
7

Załóżmy, że mam listę:Korzystanie lapply ze jeśli przetestować każdy element na liście

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

chcę testu, jeśli każdy element listy jest większa niż 7 i zwróci listę 1, jeśli jego prawdziwy i 0 jeśli fałszywy.

Jednak muszę używać lapply.

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

Oczywiście żaden z nich nie działa i ciągle pojawia się następujący błąd.

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

Wiem, że chcesz użyć 'lapply', ale:' as.numeric (alist> 7) 'działa ładnie. –

+3

"musi używać' lapply' "==" głupie zadanie domowe "? –

+0

Ha haip Carl, który go przybiłeś. Pomyślałem o około 30% sposobu na ustalenie zadania, kiedy wpadłem na to. Pomyślałem, że to dobre pytanie, chociaż lapoński ... jako argument i pomyślałem, że gdzieś tam mogę dokończyć wypowiedź. – user1181337

Odpowiedz

17

Boli mnie, aby odpowiedzieć na to pytanie, ponieważ jest to bardzo un R, aby to zrobić. Można spróbować będąc bardziej wyraźne i używać nawiasów, jak w:

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

Lub vectorized ifelse

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

Albo najlepsze:

as.numeric(alist > 7) 
+0

+1 tak samo jak moja odpowiedź, ale chciałbym zauważyć, że ifelse() jest nieco nieintuicyjne, ponieważ wydaje się, że jest to nowy użytkownik R. Zabawne, że to mówię, ponieważ bezpośrednim pytaniem przed tym było somene narzekające na błąd zamknięcia z ifelse() lol. –

+0

Jesteś bardzo poprawny (IMO) na temat 'ifelse'. Odpowiedziałem i problem "ifelse" również wieczorem (kiedy użytkownik powinien używać 'if() {} else {}') –

2

kolejne dwa:

lapply(alist > 7, as.integer) 

lub

lapply(alist > 7, ifelse, 1, 0) 
Powiązane problemy