Câu trả lời:
Xem ?which.max
> which.max( matrix[,2] )
[1] 2
Thấy chưa ?order
. Bạn chỉ cần chỉ mục cuối cùng (hoặc đầu tiên, theo thứ tự giảm dần), vì vậy điều này sẽ thực hiện thủ thuật:
order(matrix[,2],decreasing=T)[1]
order
trả về chỉ mục mà mỗi phần tử có, nhưng được sắp xếp theo giá trị của phần tử. rank
trả về chỉ mục mà mỗi phần tử sẽ có , nếu danh sách được sắp xếp trước. Do đó order
trả về các giá trị chỉ mục hiện tại; và được sử dụng như một "chỉ mục" trong thuật ngữ gấu trúc.
Còn phần sau thì sao, trong đó y là tên ma trận của bạn và bạn đang tìm giá trị lớn nhất trong toàn bộ ma trận:
row(y)[y==max(y)]
nếu bạn muốn trích xuất hàng:
y[row(y)[y==max(y)],] # this returns unsorted rows.
Để trả về các hàng đã sắp xếp, hãy sử dụng:
y[sort(row(y)[y==max(y)]),]
Ưu điểm của phương pháp này là bạn có thể thay đổi điều kiện bên trong thành bất cứ thứ gì bạn cần. Ngoài ra, bằng cách sử dụng col(y)
và vị trí của dấu phẩy treo, bạn cũng có thể trích xuất các cột.
y[,col(y)[y==max(y)]]
Để chỉ tìm hàng cho giá trị lớn nhất trong một cột cụ thể, giả sử cột 2 bạn có thể sử dụng:
seq(along=y[,2])[y[,2]==max(y[,2])]
một lần nữa, điều kiện có thể linh hoạt để tìm kiếm các yêu cầu khác nhau.
Xem Chương 5 "Giới thiệu về S và S-Plus" xuất sắc của Phil Spector để có thêm ý tưởng.