如何从tmp_l
生成tmp_v
,如下所示:
tmp_v <- c(a = 1, a = 2, a = 3, b = 2, c = 0, c = 4, a = 4)
tmp_l <- list(a = c(1, 2, 3, 4), b = 2, c = c(0, 4))
as.list
实现了此转换的一半,除了每个向量元素是一个单独的列表元素。我希望将具有相同名称的所有元素组合到一个列表元素中:
> as.list(tmp_v)
$a
[1] 1
$a
[1] 2
$a
[1] 3
$b
[1] 2
$c
[1] 0
$c
[1] 4
$a
[1] 4
有趣的是unlist(tmp_l)
几乎提供了相反的行动:
> unlist(tmp_l)
a1 a2 a3 a4 b c1 c2
1 2 3 4 2 0 4
上下文:像optim这样的优化例程需要将参数列表组合成一个参数向量。包执行此转换,并将列表中参数的名称添加到参数向量中。找到最佳参数向量后,有时需要将其转换回原始列表结构。
答案 0 :(得分:1)
我们可以split
vector
names
vector
来tmp_n <- split(unname(tmp_v), names(tmp_v))
identical(tmp_n, tmp_l)
#[1] TRUE
执行此操作
=FormatDateTime(Now(), DateFormat.ShortDate)
答案 1 :(得分:1)
另一种选择是"select a.macid,a.expity_date from table1 a JOIN table2 b ON (a.macid like b.desktop OR a.macid like b.server)"
和stack
向量:
unstack
答案 2 :(得分:1)
sapply
的另一个选项是为每个unique
名称查找向量的子集。
sapply(unique(names(tmp_v)), function(x) unname(tmp_v[names(tmp_v) == x]))
#$a
#[1] 1 2 3 4
#
#$b
#[1] 2
#
#$c
#[1] 0 4