длина уникальных элементов перечисленных векторов в R - PullRequest
0 голосов
/ 18 января 2019

В моей функции R, приведенной ниже, мне было интересно, как я могу получить длину уникальных элементов (то есть 2) двух векторов a и b?

Вот что я безуспешно пытался:

foo <- function(...){
    L <- list(...)
    lengths(unique(unlist(L)))
}

a = rep(c("a", "b"), 30) # Vector `a`
b = rep(c("a", "b"), 20) # Vector `b`

foo(a, b)  # the function returns 1 1 instead of 2 2

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Используйте lapply() или sapply(), потому что ваш объект является списком. Я думаю, вы могли бы проверить разницу между length() и lengths(). Они оба существуют, но имеют разные способности. Я предоставляю два решения foo1 и foo2:

foo1 <- function(...){
  L <- list(...)
  sapply(L, function(x) length(unique(x)))
}

foo2 <- function(...){
  L <- list(...)
  lengths(lapply(L, unique))
}

a = rep(c("a", "b"), 30) # Vector `a`
b = rep(c("a", "b"), 20) # Vector `b`

foo1(a, b)
# [1] 2 2

foo2(a, b)
# [1] 2 2
0 голосов
/ 18 января 2019

Вот ответ

Вы использовали функцию unlist - поэтому вы вернулись к началу с длинами векторов!

используйте этот код вместо

foo <- function(a,b){

  L <- list(a,b)
  lengths(unique(L)) ### this return 1 1

}

a = rep(c("a", "b"), 30) # Vector `a`

b = rep(c("a", "b"), 20) # Vector `b`

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