r - 按值对列表进行排序,同时在 R 中保留数字键
问题描述
我知道这是一个常见问题,但r[order(unlist(r))]
由于数字键,常见答案不起作用。经过一段时间的搜索,我找不到任何答案。我确实看到了如何通过它在 R 中的索引获得前 n 个值?但这使用了一个数据框,我不知道如何在我的函数中实现一个数据框。
我有一个值列表,我在value
循环中使用 r[[i]] <- 创建了这些值。现在我想对该列表进行排序,但保留数字键。
> r
[[1]]
[1] 4396750
[[2]]
[1] 6340260
[[3]]
[1] 8449058
[[4]]
[1] 5676146
> r <- r[order(unlist(r))]
> r
[[1]]
[1] 4396750
[[2]]
[1] 5676146
[[3]]
[1] 6340260
[[4]]
[1] 8449058
我需要一些方法来保留键,以便我知道从最低到最高的值由 keys 表示1,4,2,3
。然后我需要保留具有最低 3 个值的键。所以我的最终结果应该是一些给我的列表或向量1,4,2
。
我的例子被简化了,所以做一些捷径比如“只去掉最高值”是行不通的。
该函数的实际代码在这里:
knnacc <- function(e){
dist = list()
for(j in 1:10000) {
dist[[j]] <- distance(TEST[["image"]][[e]], TRAIN[["image"]][[j]])
}
#dist <- dist[order(unlist(dist))]
return(dist)
}
我想达到一个函数返回与 60,000 中距离最低的 20 个键相关联的点。
解决方案
“数字键”只是列表中的索引。要在排序列表中保留原始索引,您可以简单地根据这些原始索引向列表元素添加名称。
例如,
r = list(4396750, 6340260, 8449058, 5676146)
#> r
#[[1]]
#[1] 4396750
#
#[[2]]
#[1] 6340260
#
#[[3]]
#[1] 8449058
#
#[[4]]
#[1] 5676146
names(r) <- as.character(1:length(r))
r <- r[order(unlist(r))]
#> r
#$`1`
#[1] 4396750
#
#$`4`
#[1] 5676146
#
#$`2`
#[1] 6340260
#
#$`3`
#[1] 8449058
推荐阅读
- python - 如果第一行中的字符串符合标准,第二行符合其他标准,则
- azure - 我们是否可以更改 Azure 门户中的设置,以便在 Azure ASR 中故障转移后创建的 VM 具有高级磁盘类型?
- c# - 如何将多行文本添加到 ListBox 项?
- sql - 获取columns表的列
- sql - 带大小写和求和的 Spark SQL
- soap - WSDL 中的故障元素声明有什么用?
- javascript - 设置颜色属性时未应用 Vuetify 活动类
- amazon-web-services - 如何根据上次修改时间从 java sdk 获取 aws s3 对象元数据
- node.js - Heroku 上的“请求超时”
- python - 尝试在 Python 中解压缩远程内容时无法将 str 连接到字节