英文:
Return specific element of vector in list
问题
> list = list(c("monday","tuesday","wednesday"),c("thursday","friday","saturday"),"sunday")
> list
[[1]]
[1] "monday" "tuesday" "wednesday"
[[2]]
[1] "thursday" "friday" "saturday"
[[3]]
[1] "sunday"
> vector = c(2,3,1)
> vector
[1] 2 3 1
> goal=c("tuesday","saturday","sunday")
> goal
[1] "tuesday" "saturday" "sunday"
我可以这样获取每个列表元素的第一个元素:
lapply(list, function(x) x[1])
但是我无法使用矢量进行索引。
我还尝试将矢量转换为列表并附加它:
mapply(append, list, as.list(vector), SIMPLIFY = FALSE)
然后我会得到一个列表,其中每个元素的最后一个字符串是索引的字符串。但是我无法返回索引并将其用作数字以查找相应的字符串。
英文:
I have a list of vectors of strings. And I have a vector with indexes. I would like to return the indexed string in each list element.
> list = list(c("monday","tuesday","wednesday"),c("thursday","friday","saturday"),"sunday")
> list
[[1]]
[1] "monday" "tuesday" "wednesday"
[[2]]
[1] "thursday" "friday" "saturday"
[[3]]
[1] "sunday"
> vector = c(2,3,1)
> vector
[1] 2 3 1
> goal=c("tuesday","saturday","sunday")
> goal
[1] "tuesday" "saturday" "sunday"
I can get the first element like this:
lapply(list,"[[",1)
but I cannot index the vector.
I also tried making the vector a list and append it:
mapply(append,list,as.list(vector),simplify=F)
And I get a list where the last string in each element is a string of the index. But I cannot return the index and use it as a numeric to find the respective string.
答案1
得分: 2
我不确定你为什么要在这里尝试使用append
。你的第一个方法基本上是正确的:使用[[
。但是你需要对索引和列表都进行映射,使用mapply
:
mapply(`[[`, list, vector)
英文:
I am unsure why you are trying to use append
at all here. Your first approach was essentially correct: Use [[
. But you need to map over the indices as well as the list, using mapply
:
mapply(`[[`, list, vector)
答案2
得分: 1
有一个选项是使用来自tidyverse
包集合的purrr
。使用map_*
而不是mapply
的主要优势是在不同map
变种之间保持一致的接口。
map2_chr(list, vector, `[[`)
英文:
There is also the option of using purrr
from the tidyverse
collection of packages. The main advantage of using map_*
instead of mapply
is the consistent interface between map variants.
map2_chr(list, vector, `[[`)
答案3
得分: 0
另一个选项:
unlist(Map(function(x, i) x[i], list, vector))
[1] "星期二" "星期六" "星期日"
英文:
Another option:
unlist(Map(function(x, i) x[i], list, vector))
[1] "tuesday" "saturday" "sunday"
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论