为何sapply无法将列表简化为向量?求可行替代方案
问题解答
这是预期行为吗?
没错,这是sapply()的预期行为。当你设置simplify = 'vector'时,只有当每个元素的处理结果长度完全一致时,sapply()才会把结果简化成向量。而你的例子里,cumsum处理l1的第一个元素得到2个值,处理第二个元素只得到1个值,长度不统一,没法合并成标准的原子向量,所以sapply()只能返回列表。
怎么得到目标向量?
可以用以下几种方式把所有结果合并成单一向量:
方法1:
sapply()+unlist()
先通过sapply()计算累积和,再用unlist()把列表展开成向量:l1 <- list(1:2, 3) unlist(sapply(l1, cumsum)) #> [1] 1 3 3方法2:
lapply()+unlist()lapply()本身就返回列表,后续用unlist()展开,效果和上面一样:unlist(lapply(l1, cumsum)) #> [1] 1 3 3方法3:用
purrr包扁平化结果
如果你常用tidyverse系列工具,可以用map()计算后,再用flatten_dbl()把数值型列表转成向量:library(purrr) map(l1, cumsum) %>% flatten_dbl() #> [1] 1 3 3
内容的提问来源于stack exchange,提问作者Dan Adams
相关产品推荐
相关产品推荐

