R объединить два списка в один, поочередно рисуя элементы из каждого списка - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу объединить два списка в один, поочередно рисуя элементы из каждого списка

Пример:

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

Я не хочу:

c(s1,s2)

ВместоЯ хочу

list(1,3,2,4)

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Вот решение 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
0 голосов
/ 30 ноября 2018

Используя Map, добавьте соответствующие list элементы 's1' и 's2' как list, а затем с помощью do.call(c сведите вложенный список к списку глубины 1.

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

Или другой вариант - rbind list элементов в matrix и удаление атрибутов dim с c

c(rbind(s1, s2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...