我有这样的矢量
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.list和setNames:
x = c("1", "a","b")
as.list(setNames(rep(as.numeric(x[1]), length(x) - 1), x[-1]))
Run Code Online (Sandbox Code Playgroud)
像这样?
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发现之前的错误.
它不是一种应用样式,但包装所需命令的简单函数是:
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)