对R中嵌套列表中的行求和

时间:2017-04-02 06:58:06

标签: r

我有一个嵌套列表来自一个程序,其长度为100.我需要将第一行的所有元素和第二行的所有元素相加。这是一个可重复的小例子。我需要的是1 + 3 + 5 + 7 = 16的总和以及2 + 4 + 6 + 8 = 20的和作为矢量或矩阵。

 l1<-as.matrix(c(1,2))
 l2<-as.matrix(c(3,4))
 l3<-as.matrix(c(5,6))
 l4<-as.matrix(c(7,8))
 ll1<-list(l1,l2)
 ll2<-list(l3,l4)
 lll<-list(ll1,ll2)

   lll
 [[1]]
 [[1]][[1]]
      [,1]
 [1,]    1
 [2,]    2

 [[1]][[2]]
      [,1]
 [1,]    3
 [2,]    4


 [[2]]
 [[2]][[1]]
      [,1]
 [1,]    5
 [2,]    6

 [[2]][[2]]
      [,1]
 [1,]    7
 [2,]    8

3 个答案:

答案 0 :(得分:2)

我发现purrr包对函数flatten()很有用,因为它只删除列表层次结构的一个级别:

library(magrittr) #for pipes
library(purrr) #for flatten
lll %>% flatten %>% as.data.frame %>% rowSums

根据akrun的回答,它类似于do.call(c, lll)

答案 1 :(得分:1)

我们可以base R使用list删除嵌套list,然后使用do.call(c cbind删除list rowSums元素}并获取rowSums(do.call(cbind, do.call(c, lll))) #[1] 16 20

unlist

或者我们可以matrix创建一个包含2列的colSums,然后获取colSums(matrix(unlist(lll), ncol=2, byrow=TRUE)) #[1] 16 20

<?php
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$query_args = array(
    'post_type' => array('post','series','movie'),
    'posts_per_page' => 10,
    'paged' => $paged
);
$the_query = new WP_Query( $query_args );
?>

<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

    <h1><?php the_title();?></h1>

<?php endwhile; ?>
<div class="col-md-12">
    <?php if ($the_query->max_num_pages > 1) { // check if the max number of pages is greater than 1    ?>
        <nav class="prev-next-posts">
            <div class="prev-posts-link">
                <?php echo get_next_posts_link( 'Older Entries', $the_query->max_num_pages ); // display older posts link ?>
            </div>
            <div class="next-posts-link">
                <?php echo get_previous_posts_link( 'Newer Entries' ); // display newer posts link ?>
            </div>
        </nav>
    <?php } ?>
</div>
<?php wp_reset_postdata(); ?>
<?php else: ?>
    <article>
        <h1>Sorry...</h1>
        <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
    </article>
<?php endif; ?>

答案 2 :(得分:1)

基础R中的

Reduce

Reduce("+", lapply(Reduce(c, lll), rowSums))
#[1] 16 20