R уникальные выражения - PullRequest
0 голосов
/ 14 мая 2018

Я использую пакет gramEvol для генерации выражений, которые затем используются для дальнейшей обработки данных.

Иногда результат содержит повторяющиеся выражения.

Как мне сохранить только уникальные выражения? (использование уникальной функции не работает, так как она не определена для выражений)

Вот воспроизводимый пример, демонстрирующий проблему:

data("iris")
expr <- sapply(colnames(iris), as.expression)
expr
#expression(Sepal.Length = "Sepal.Length", Sepal.Width = "Sepal.Width", 
#    Petal.Length = "Petal.Length", Petal.Width = "Petal.Width", 
#    Species = "Species")
unique(expr)
#Error in unique.default(expr) : 
#  unimplemented type 'expression' in 'HashTableSetup'
expr <- c(expr, expr) # concat works
expr
#expression(Sepal.Length = "Sepal.Length", Sepal.Width = "Sepal.Width", 
#    Petal.Length = "Petal.Length", Petal.Width = "Petal.Width", 
#    Species = "Species", Sepal.Length = "Sepal.Length", Sepal.Width = #"Sepal.Width", Petal.Length = "Petal.Length", Petal.Width = "Petal.Width", 
#    Species = "Species")
unique(expr)
#Error in unique.default(expr) : 
#  unimplemented type 'expression' in 'HashTableSetup' 

1 Ответ

0 голосов
/ 14 мая 2018

Это превращает выражение в список и использует duplicated:

expr[!duplicated(as.list(expr))]
#expression(Sepal.Length = "Sepal.Length", Sepal.Width = "Sepal.Width", 
#    Petal.Length = "Petal.Length", Petal.Width = "Petal.Width", 
#    Species = "Species")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...