R 列表中最长元素的长度

R 列表中最长元素的长度,r,list,R,List,我有一个列表,如下所示: [[1]] [1] -3 [[2]] [1] 0 0 [[3]] [1] 6 -36 54 我想用这个来创建一个向量 3 -36 54 为了做到这一点,我考虑了在元素的末尾添加零,刚好足以使元素大小相等并使用 Reduce('+',....) 将元素粘贴在一起。但是,我不想添加过多的零。所提到的列表不是我想要的列表所必需的。我有多张名单。最后,我的问题是:有没有办法从列表中检索元素的最大长度?我们用长度得到列表中各个元素的长度,然后用最大值得到它的最大值

我有一个列表,如下所示:

[[1]]
[1] -3

[[2]]
[1] 0 0

[[3]]
[1]   6 -36  54
我想用这个来创建一个向量

3 -36 54
为了做到这一点,我考虑了在元素的末尾添加零,刚好足以使元素大小相等并使用

Reduce('+',....)

将元素粘贴在一起。但是,我不想添加过多的零。所提到的列表不是我想要的列表所必需的。我有多张名单。最后,我的问题是:有没有办法从列表中检索元素的最大长度?

我们用
长度
得到
列表中各个元素的
长度
,然后用
最大值
得到它的
最大值,创建一个逻辑索引并对
列表进行子集

i1 <-  max(lengths(lst))
i2 <- lengths(lst)== i1
lst[i2]
数据
lst您可以将列表扩展为一个矩阵,其中填充
NA
,并在其上使用
rowSums

# Data
foo <- list(-3, c(0, 0), c(6, -36, 54))
rowSums(sapply(foo, "[", seq_len(max(lengths(foo)))), na.rm = TRUE)
[1]   3 -36  54
带有辅助函数的
Reduce()
解决方案:

`%+na%` <- function(x, y) {
  # Originally from: # https://stackoverflow.com/a/13106770/4552295 
  ifelse(is.na(x), y, ifelse(is.na(y), x, x + y)) 
}

n <- max(lengths(lst))    
Reduce("%+na%", lapply(lst, "[", 1:n))
[1]   3 -36  54

`%+na%`我很难理解这一点,但我想我可以理解其中的一些答案。你想近似一个矩阵吗,也就是说,在末尾加零就是这个意思?
lst <- list(-3, c(0, 0), c(6, -36, 54))
# Data
foo <- list(-3, c(0, 0), c(6, -36, 54))
rowSums(sapply(foo, "[", seq_len(max(lengths(foo)))), na.rm = TRUE)
[1]   3 -36  54
     [,1] [,2] [,3]
[1,]   -3    0    6
[2,]   NA    0  -36
[3,]   NA   NA   54
`%+na%` <- function(x, y) {
  # Originally from: # https://stackoverflow.com/a/13106770/4552295 
  ifelse(is.na(x), y, ifelse(is.na(y), x, x + y)) 
}

n <- max(lengths(lst))    
Reduce("%+na%", lapply(lst, "[", 1:n))
[1]   3 -36  54