返回包含向量中每个元素索引的列表。

4

我在R中有一个向量,其中包含重复的元素

a<-c("A","A","A","B","B","C","A")

我希望知道将其转换为列表的最有效方法,其中每个元素都是键,其在原始向量中的位置是值:

l<-list(A=c(1,2,3,7),B=c(4,5),C=c(6))
l
$A
[1] 1 2 3 7
$B
[1] 4 5
$C
[1] 6
2个回答

7
split(seq_along(a), a)
# $A
# [1] 1 2 3 7
# 
# $B
# [1] 4 5
# 
# $C
# [1] 6

0
一个可能的解决方案:
mywhich<-function(x){
    out<-which(a==x)
    return(out)
}
l <- sapply(unique(a), mywhich)

1
嗯,为什么不使用 mywhich <- function (x) which(a == x) 这个一次性的表达式呢?就此而言,mywhich 是特定于 a 的,因此在这里使用命名函数毫无意义 - 只需使用 sapply(unique(a), function (x) which (x == a)) 即可。 - Konrad Rudolph
你不会把我卷入这场宗教战争中(我每天在哥伦比亚大学都会遇到这种情况):有些人出于自己的原因而不喜欢使用匿名函数 :-) - Federico Giorgi
在一种函数式语言中?请原谅我的粗鲁,但那听起来很愚蠢。 - Konrad Rudolph
这里还有两个值得怀疑的做法:1)在您的函数中使用全局变量。2)使用sapply,根据输入的不同,它不会总是返回一个列表(尝试a <- LETTERS[1:3]),除非您添加simplify = FALSE - flodel
我同意flodel的观点。但是Konrad,仅仅通过匿名函数编写R代码是导致博士生来找我哭诉的原因,因为他们发现一些R代码行难以阅读和难以维护。如果一个函数执行某项具体任务,即使只执行一次,它也应该有一个名称。 - Federico Giorgi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接