将矢量转换为列表

kng*_*yen 8 r

我有这样的矢量

 c("1", "a","b")
Run Code Online (Sandbox Code Playgroud)

我想创建这个列表

list("a"=1,"b"=1)
Run Code Online (Sandbox Code Playgroud)

有没有办法以"申请"的方式做到这一点?谢谢.

-k

Cha*_*les 12

使用as.listsetNames:

x = c("1", "a","b")
as.list(setNames(rep(as.numeric(x[1]), length(x) - 1), x[-1]))
Run Code Online (Sandbox Code Playgroud)

  • 因为我在寻找解决更常规的将矢量转换为命名列表的情况时发现了这个问题,只是想补充一点,如果你不介意名字与内容相同,你也可以这样做: as.list(setNames(X,X))` (2认同)

Dir*_*tel 7

像这样?

R> kn <- c("1", "a", "b")
R> nl <- vector(mode="list", length=length(kn)-1)
R> names(nl) <- kn[-1]
R> nl <- lapply(nl, function(x) kn[1])
R> nl
$a
[1] "1"

$b
[1] "1"

R> 
Run Code Online (Sandbox Code Playgroud)

感谢Gavin发现之前的错误.


Rei*_*son 5

它不是一种应用样式,但包装所需命令的简单函数是:

makeList <- function(vec) {
    len <- length(vec[-1])
    out <- as.list(rep(as.numeric(vec[1]), len))
    names(out) <- as.character(vec[-1])
    out
}
Run Code Online (Sandbox Code Playgroud)

使用矢量,它给出:

> vec <- c("1", "a","b")
> makeList(vec)
$a
[1] 1

$b
[1] 1
Run Code Online (Sandbox Code Playgroud)