2017-07-10 3 views
1

ich im Voraus entschuldigen, wenn mein Titel nicht der beste Weg ist es, das Thema meiner Frage einzuzurahmen ...Gibt es eine Kombination aus sapply und lapply, die das Aufrufen beider Funktionen umgeht?

Derzeit verwende ich eine Kombination aus sapply und lapply zwei Listen vorzuzubelegen, Ag1 und Al1, das Setzen von oberen und unteren Grenzen auf ihren Einträgen basierend auf einem Vektor von Ganzzahlen A und einer Ganzzahl B. Hier geht:

A = c(7,5,3,4,2) 
B = 4 
Ag1 = sapply(lapply(B - A, function(a) a), function(b) max(1,b)) 
Al1 = sapply(lapply(B + A, function(a) a), function(b) min(1,b)) 

Kann ich dies erreichen effizient, ohne dass die Kombination von sapply und lapply mit?

+6

'pmax (B-A, 1); pmin (B + A, 1) ' –

+0

guter Punkt auf die Verwendung von pmin und pmax –

+0

Es gibt die grundlegende Frage, warum Sie denken, dass" platt (B - A, Funktion (a) a) "überhaupt notwendig ist ... –

Antwort

1

Ist das Problem, das Sie eigentlich lösen möchten, komplizierter? Ihr Beispiel kann durch einfaches Kombinieren der Funktionen vereinfacht werden.

A = c(7,5,3,4,2) 
B = 4 
Ag1 = sapply(B - A, function(a) max(1, a)) 
Al1 = sapply(B + A, function(a) min(1, a)) 

> Ag1 
[1] 1 1 1 1 2 

> Al1 
[1] 1 1 1 1 1 
+0

das funktioniert gut , Vielen Dank. Die 'pmin' und' pmax' Lösungen von @ d.b sind nett. Diese Funktionen sind Teil eines größeren Prozesses. Die Größe von "A" variiert, aber die Größe von "B" bleibt gleich. Prost – thatWaterGuy

Verwandte Themen