在R中,我有一个非平凡对象的列表(它们不是像标量这样的简单对象,R可以预期能够定义一个顺序)。我想对列表进行排序。大多数语言允许程序员提供一个函数或类似的函数来比较传递给排序函数的一对列表元素。我如何整理我的列表?对R中非平凡元素的列表排序
10
A
回答
14
为了让这个过程尽可能简单,比如你的对象是带有两个元素的列表,一个名字和一个值。该值是一个数字;这就是我们想要排序的内容。你可以想象有更多的元素,并需要做一些更复杂的排序。
该sort
帮助页面告诉我们,sort
使用xtfrm
; xtfrm
反过来告诉我们它将使用类的==
和>
方法。
首先,我将定义,我要排序的对象:因为xtfrm
作品在x[i]
的
xx <- lapply(c(3,5,7,2,4), function(i) list(name=LETTERS[i], value=i))
class(xx) <- "myobj"
现在,我需要定义一个[
函数返回所需的元素,但仍然有正确的类
`[.myobj` <- function(x, i) {
class(x) <- "list"
structure(x[i], class="myobj")
}
现在我们需要为myobj
类==
和>
功能;通过适当地向量化这些可能会更聪明;但是对于排序函数,我们知道我们只会传递长度为1的myobj
,所以我将使用第一个元素来定义关系。
`>.myobj` <- function(e1, e2) {
e1[[1]]$value > e2[[1]]$value
}
`==.myobj` <- function(e1, e2) {
e1[[1]]$value == e2[[1]]$value
}
现在sort
只是工作。
sort(xx)
为你的对象写一个完整的Ops
函数可能被认为是更合适的;然而,只要排序,这似乎是你所需要的。请参阅Venables/Ripley的第89-90页关于使用S3风格进行此操作的更多详细信息。此外,如果您可以轻松地为对象编写函数,那将更简单,而且可能更快。
4
order
函数将允许您确定字符或数字注释的排序顺序并断开与后续参数的关系。你需要对你想要的更具体。生成一个“非平凡对象”的例子,并在某个R对象中指定你想要的顺序。列出可能是最不矢量对象:
> slist <- list(cc=list(rr=1), bb=list(ee=2, yy=7), zz="ww")
> slist[order(names(slist))] # alpha order on names()
$bb
$bb$ee
[1] 2
$bb$yy
[1] 7
$cc
$cc$rr
[1] 1
$zz
[1] "ww"
slist[c("zz", "bb", "cc")] # an arbitrary ordering
$zz
[1] "ww"
$bb
$bb$ee
[1] 2
$bb$yy
[1] 7
$cc
$cc$rr
[1] 1
1
一种选择是创建你的对象xtfrm
方法。诸如order
之类的函数会在多个列中使用多个列,这些列在某些情况下可用。对于gtools
包中的mixedsort
等特定情况,还有一些专用功能。
相关问题
- 1. R:列表中的哪个元素对应于排序列表的元素
- 2. 如何对R中列表中的元素进行排序?
- 3. 非列元素排序mysql表
- 4. R中自定义类的元素列表的排序列表?
- 5. 按元素列表的第二个元素对列表进行排序
- 6. 左对齐水平列表的元素
- 7. 对数组列表中的异类元素进行排序
- 8. Python:对列表中的特定元素进行排序
- 9. 如何对表格中的Django元素列进行排序?
- 10. 重新排列列表元素 - 序言
- 11. 大块非平凡重塑
- 12. MySql非平凡选择
- 13. Grails中的非平凡数据查询
- 14. 对齐列表元素中的元素
- 15. 保留元素的排序列表,按该元素的外部属性排序
- 16. python如何从列表中删除元素的排序列表?
- 17. 完全非平凡依赖和非平凡依赖之间的区别
- 18. 创建固定大小元素列表中的非重复排列列表
- 19. 按递增顺序对元素排序两个列表
- 20. 无法对列排序R
- 21. 将元素插入排序列表
- 22. Python:按元素排序列表字典
- 23. 根据一些元素排序列表
- 24. r-concatenate列表中的n个元素
- 25. 访问列表中的R元素
- 26. 比较R中的列表元素
- 27. 删除列表中的元素R
- 28. 如何在共享点配置非平凡列表视图
- 29. 如何对多个元素的字典列表进行排序
- 30. jQuery对象中的排序元素
你能提供一个这个平凡的元素列表的片段,以便其他人了解你在说什么吗?提示在这里写一个可重现的问题:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Chase