繁体   English   中英

如何根据身份替换列表的元素

[英]How to substitute elements of a list based on identities

我有一个这样的列表:

list1 <- as.list(c('a', 'b', 'c', 'd', 'e', 'f'))

我想根据这个替换它的所有元素:

new_val <- c('c'=1,'e'=2,'d'=3,'b'=4,'f'=5,'a'=6)

预期的结果应该是这样的:

list3 <- c(6, 4, 1, 3, 2, 5)

我正在尝试使用 replace() 和 modifyList() 等不同的函数,但我很吃力。 你可以帮帮我吗?

尝试

new_val[unlist(list1)]
# a b c d e f 
# 6 4 1 3 2 5 

如果您不需要命名向量作为结果,请使用unname

new_val[unlist(list1)] |> 
  unname()

使用基本管道运算符|>编写上述内容的更奇特的方式:

list1 |> 
  unlist() |> 
  `[`(x = new_val, i = _) |> 
  unname()

不确定在这个例子中它是否使代码更容易理解。

如果将列表改回字符向量,则可以使用它来索引new_val

unname(new_val[as.character(list1)])
# 6 4 1 3 2 5

另一种使用sapply方法

sapply(list1, function(x) new_val[x])
a b c d e f 
6 4 1 3 2 5

或未命名

unname(sapply(list1, function(x) new_val[x]))
[1] 6 4 1 3 2 5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM