2015-01-22 29 views
9

R listesinde listelerin listesini sıralamaya çalışıyorum. Her alt liste bir tam sayı ve bir karakter dizesi içerir. Amacım, listeleri son listenin artan sırayla tamsayıya göre sıralanmasını sağlamaktır.R listesindeki liste nasıl sıralanır?

a <- list(-5,"help") 
b <- list(3, "stack") 
c <- list(1, "me") 
d <- list(10, "overflow") 

list.of.lists <- list(a,b,c,d) 
magic.sort(list.of.lists) 
# Below is not exactly how it would be displayed, but should be understandable 
-5, "help" 
1, "me" 
3, "stack" 
10, "overflow" 

bu sonucu elde etmek R içinde güzel bir yolu var mı: Aşağıda ben başarmaya çalışıyorum şeyin bir örnektir? İdeal olarak sonuç, bir liste listesi olarak da iade edilmelidir.

cevap

16

bu deneyin:

list.of.lists[order(sapply(list.of.lists,'[[',1))] 
+0

Hızlı ve doğru cevap için teşekkürler! Onu kabul etmeye çalıştım ama sanırım birkaç dakika beklemem gerek! Saatin bunu kabul etmesine rağmen, her parçanın ne yaptığına dair bir ayrıntı var mı? Sapply kullanımıyla en çok kafam karıştı. '[[' Nedir? Ayrıca, sapply belirterek son argüman nedir? Ben R için yeni ... – mjnichol

+2

@mjnichol - uzun el yazabilirsiniz: "sapply (list.of.lists, function (x) x [[1]])' - sadece ilk elementi ayıklamak her bir liste ve daha sonra bunu 'order' öğesine iletilen bir vektör olarak döndürüyoruz. Örneğin. - 'a [[1]]' ve '[['(a, 1)' eşdeğerdir. – thelatemail

+0

Ah, ben çok fazla düşündüm. Teşekkür ederim! – mjnichol

1

Sen list.of.lists yapı çok şey var.

df <- data.frame(t(list.2d)) 
: Böyle bir veri çerçevesi içine, oradan muhtemelen

list.2d <- sapply(list.of.lists, cbind) 

ve: Yapmanız gereken diğer işlem bağlı olarak, şöyle bir iki boyutlu listeye dönüştürebilmek isteyebilirsiniz

(Teknik olarak, bir veri çerçevesi bir liste türüdür.) Belirli bir sütun kümesine göre sıralamak ve öğelerin alt kümelerini ayıklamak daha geleneksel olabilir. (Yine de kabul edilen cevabı gerçekten beğeniyorum.)