2012-07-16 14 views
5

tôi có một danh sách như thế này:bởi lệnh để tìm ra số lượng tối đa từ một danh sách

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

Tôi muốn tìm hiểu số lượng tối đa cho tất cả các yếu tố của danh sách không phân biệt các dấu hiệu. tức là tôi muốn tôi ra ngoài để trông giống như thế này:

Ll 
$a 
-7.8 
$b 
6.7 
$c 
8.9 

Có cách nào để thực hiện điều này thông qua một dòng lệnh không? Có thể thực hiện bằng lệnh 'by' không?

+0

'by' hoạt động trên các tập hợp con được xác định bởi biến phân loại. Tôi không thấy một biến như vậy trong định nghĩa vấn đề này. Các danh sách với một tập hợp các độ dài iregulat sẽ là một đối số đặc biệt không phù hợp với hàm 'by'. –

Trả lời

11

mã thể sanh sản/dữ liệu luôn luôn giúp đỡ:

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)) 

Sử dụng lapply để áp dụng chức năng của riêng bạn để mỗi phần tử, which.max dễ dàng tìm thấy tối đa, và chúng tôi chỉ nhận được giá trị olute abs trong mỗi:

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

$b 
[1] 6.7 

$c 
[1] 8.9 
+0

Câu trả lời hay hơn tôi. –

+0

và làm thế nào tôi có thể tìm thấy các chỉ số của giá trị tối đa? – Seymour

+0

trả lại thay vì giá trị lapply (L1, hàm (x) which.max (abs (x))) – mdsumner

1

lapply là bạn của bạn!

ví dụ:

.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 
Các vấn đề liên quan