我有一个嵌套列表来自一个程序,其长度为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
答案 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)
Reduce
:
Reduce("+", lapply(Reduce(c, lll), rowSums))
#[1] 16 20