Мы можем использовать subset
из base R
subset(df2, sample1 %in% unlist(c(List1, List2)))
df2 <- structure(list(sample1 = c("a", "c", "b", "c", "a", "d", "d"),
sample2 = c("b", "c", "c", "d", "c", "f", "h"), N = c(2L,
1L, 3L, 2L, 3L, 1L, 3L)), class = "data.frame", row.names = c(NA,
-7L))
List1 <- list('a', 'b')
List2 <- list('c')
Дженерики Java не поддерживают типы объединения (этот параметр может быть A ИЛИ B).
На связанной ноте, которая может представлять интерес для некоторых, он действительно поддерживает несколько границ, если Вы хотите осуществить несколько ограничений. Вот пример от JDK, упомянутого в учебном руководстве по дженерикам Java:
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
Вы могли использовать методы фабрики для всех поддерживаемых типов и сделать конструктора частным/защищающим. Необходимо зафиксировать универсальный тип в конструкторе так или иначе так, чтобы он имел смысл, таким образом, Вы могли, вероятно, кодировать его как это:
public final class MyClass<T> {
public static MyClass<Integer> newInstance(int i) {
return new MyClass<Integer>(i);
}
public static MyClass<String> newInstance(String s) {
return new MyClass<String>(s);
}
//More factory methods...
protected MyClass(T obj) {
//...
}
}
Или если Вы не хотите параметр конструктора, что-то вроде этого: общедоступный заключительный класс MyClass {общедоступный статический MyClass newIntegerInstance () {возвращает новый MyClass ();}//...}
Как erickson указанный, общая реализация может положиться только на Объект так или иначе, таким образом, единственное ограничение, что можно создать другие реализации для других типов помимо примитива и Строки.
Интересный вопрос, это пугалось меня немного. Однако, по-видимому, это невозможно. Я попробовал несколько различных взломов, ни один действительно не работает.
В то время как дженерики не будут работать здесь, базовый тип с производными типами для Number
и String
будет. Так как универсальный тип стерся бы к Object
так или иначе любая функциональность, которую Вы поместили бы, там может войти в абстрактный базовый класс. Вам, вероятно, будет нужно только определенное для типа средство доступа на подклассе для получения значения.
Кроме того, быть осторожным с Number
класс. Это не ограничено упаковкой типов примитивов, поскольку любой может расширить его — например, BigInteger
.