R将两个列表合并为一个,从每个列表中交替绘制元素

时间:2018-11-29 21:03:18

标签: r

我想将两个列表合并为一个,从每个列表中交替绘制元素

示例:

s1 <- list(1,2)
s2 <- list(3,4)

我不想要:

c(s1,s2)

相反,我想要

list(1,3,2,4)

2 个答案:

答案 0 :(得分:2)

使用Map将's1'和's2'的相应list元素附加为list,然后使用do.call(c将嵌套列表展平到深度1。

do.call(c, Map(list, s1, s2))

或者另一种选择是将rbind元素list放入matrix并使用dim删除c属性

c(rbind(s1, s2))

答案 1 :(得分:2)

这是一个有趣的Rcpp解决方案:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
List abc(List x1, List x2) {
  if(x1.size() != x2.size()) throw exception("lists must be same size");
  List new_list(x1.size()*2);
  for(size_t i=0; i<x1.size(); i++ ) {
    new_list[2*i] = x1[i];
    new_list[2*i+1] = x2[i];
  }
  return(new_list);
}

R:

library(Rcpp)
sourceCpp("abc.cpp")
abc(s1,s2)

[[1]]
[1] 1

[[2]]
[1] 3

[[3]]
[1] 2

[[4]]
[1] 4