簡體   English   中英

檢查等長列表中的元素長度

[英]Check lengths of elements in list of equal length

檢查列表中的元素長度是否相等?

例如:

l <- list(c(1:3),c(2:7),c(12:13))

[[1]]
[1] 1 2 3

[[2]]
[1] 2 3 4 5 6 7

[[3]]
[1] 12 13

我有一個包含許多條目的長列表,並想要一種方法來檢查每個元素是否具有相同的長度。

由於長度不同(3,6,2),因此應返回FALSE。

嘗試這個:

length(unique(sapply(l, length))) == 1
# [1] FALSE

或@ PierreLafortune的方式:

length(unique(lengths(l))) == 1L

或@ CathG的方式:

all(sapply(l, length) == length(l[[1]])) 
#or
all(lengths(l) == length(l[[1]]))

一些基准測試:

#data
set.seed(123)
l <- lapply(round(runif(1000,1,100)), runif)


library(microbenchmark)
library(ggplot2)

#benchmark
bm <-   microbenchmark(
  zx8754 = length(unique(sapply(l, length))) == 1,
  PierreLafortune=length(unique(lengths(l))) == 1L,
  CathG_1 = all(lengths(l) == length(l[[1]])),
  CathG_2 = all(sapply(l, length) == length(l[[1]])),
  times = 10000)

# result
bm
Unit: microseconds
            expr     min      lq      mean  median      uq       max neval  cld
          zx8754 326.605 355.281 392.39741 364.034 377.618 84109.597 10000    d
 PierreLafortune  23.545  25.960  30.24049  27.168  28.375  3312.829 10000  b  
         CathG_1   9.056  11.471  13.49464  12.679  13.584  1832.847 10000 a   
         CathG_2 319.965 343.207 371.50327 351.659 364.940  3531.068 10000   c 

#plot benchmark
autoplot(bm)

在此輸入圖像描述

我會用:

length(unique(lengths(l))) == 1L
[1] FALSE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM