2012-07-16 10 views
5

tengo una lista como esta:por el comando para averiguar el número máximo de una lista

Ll 
$a 
3.4 5.6 -2.1 -7.8 
$b 
2.1 6.7 
$c 
-6.7,0.001,8.9 

Quiero averiguar el número máximo de todos los elementos de la lista independientemente de los signos. es decir, yo quiero que mi fuera ponga a tener este aspecto:

Ll 
$a 
-7.8 
$b 
6.7 
$c 
8.9 

¿Hay una manera de hacer esto a través de línea de comandos única? ¿Se puede hacer utilizando el comando 'by'?

+0

'by' realiza operaciones en subconjuntos definidos por una variable categórica. No veo ver tal variable en la definición de este problema. Las listas con un conjunto de longitudes ireguladas serían un argumento particularmente inadecuado para la función 'by'. –

Respuesta

11

reproducible código/datos siempre ayuda:

L1 <- list(a = c(3.4, 5.6, -2.1, -7.8), b = c(2.1, 6.7), c = c(-6.7, 0.001, 8.9)) 

Uso lapply para aplicar su propia función a cada elemento, which.max encuentra fácilmente la máxima, y ​​acabamos de obtener el valor oluta abs dentro de cada uno:

lapply(L1, function(x) x[which.max(abs(x))]) 
$a 
[1] -7.8 

$b 
[1] 6.7 

$c 
[1] 8.9 
+0

Mejor respuesta que la mía. –

+0

y ¿cómo puedo encontrar los índices del valor máximo? – Seymour

+0

devolverlos en lugar del valor de lapply (L1, función (x) which.max (abs (x))) – mdsumner

1

lapply es tu amigo!

por ejemplo.

.list <- list(a = 1:5, b = runif(7), c = -3:1) 
lapply(.list, function(x) x[which.max(abs(x))]) 
## $a 
## [1] 5 
## 
## $b 
## [1] 0.9248526 
## 
## $c 
## [1] -3 
Cuestiones relacionadas