如何根据索引向量提取字符串向量列表中对应位置的元素?
按对应索引向量提取列表元素的解决方案
问题场景
我有一个由字符串向量组成的列表,还有一个索引向量,需要提取列表中每个向量对应索引位置的字符串。示例数据如下:
list_data <- list(c("monday","tuesday","wednesday"),c("thursday","friday","saturday"),"sunday") list_data # [[1]] # [1] "monday" "tuesday" "wednesday" # # [[2]] # [1] "thursday" "friday" "saturday" # # [[3]] # [1] "sunday" index_vec <- c(2,3,1) index_vec # [1] 2 3 1 # 期望结果 goal <- c("tuesday","saturday","sunday") goal # [1] "tuesday" "saturday" "sunday"
我可以用lapply(list_data,"[[",1)提取固定位置的元素,但无法用索引向量实现对应提取。尝试过mapply(append,list_data,as.list(index_vec),simplify=F),结果只是把索引追加到每个列表元素末尾,无法用它作为索引取值。
解决方案
可以使用mapply()或Map()函数,将列表的每个元素与索引向量的对应值配对,调用[[提取函数完成目标操作:
方法1:使用mapply()直接得到结果向量
result <- mapply("[[", list_data, index_vec) result # [1] "tuesday" "saturday" "sunday"
方法2:使用Map()先得到列表再转为向量
如果需要先得到列表形式的结果,再转为向量可以用Map():
result_list <- Map("[[", list_data, index_vec) result_vec <- unlist(result_list) result_vec # [1] "tuesday" "saturday" "sunday"
说明
mapply()会自动将列表的每个元素和索引向量的每个元素一一对应,调用[[函数提取对应位置的元素,完美匹配需求。之前使用append只是将索引值作为元素添加到列表项中,并没有执行提取操作,所以无法得到目标结果。
内容的提问来源于stack exchange,提问作者user22097594
相关产品推荐
相关产品推荐

