Использовать аргумент dig.lab
в функции cut
:
a<-c(1,10,100,1000,100000,1000000)
b<-cut(a,
breaks=data.frame(
classIntervals(
a,n=3,method="quantile")[2])[,1],
include.lowest=T,dig.lab=10) ##Number of digits used
b
[1] [1,70] [1,70] (70,34000] (70,34000]
[5] (34000,1000000] (34000,1000000]
Levels: [1,70] (70,34000] (34000,1000000]
Приведенный ниже код с использованием универсального кода верен, но, подумав об этом, я думаю, что использование связанного типа может быть более подходящим здесь. Черта должна выглядеть следующим образом:
pub trait HashMapContainer {
type Value;
fn get_hash_map(&self) -> &HashMap<String, Self::Value>;
fn get_hash_map_mut(&mut self) -> &mut HashMap<String, Self::Value>;
}
Разница в том, что теперь вы можете реализовать черту только один раз для структуры, а не несколько раз, что является более правильным в этом случае. .
Реализации примерно такие же, как с параметром универсального типа.
impl HashMapContainer for HashMapContainerImpl1 {
type Value = String;
fn get_hash_map(&self) -> &HashMap<String, Self::Value> {
&self.map
}
fn get_hash_map_mut(&mut self) -> &mut HashMap<String, Self::Value> {
&mut self.map
}
}
impl HashMapContainer for HashMapContainerImpl2 {
type Value = u8;
fn get_hash_map(&self) -> &HashMap<String, Self::Value> {
&self.map
}
fn get_hash_map_mut(&mut self) -> &mut HashMap<String, Self::Value> {
&mut self.map
}
}
( Детская площадка )
Вы также можете посмотреть на Когда уместно использовать связанный тип по сравнению с универсальным типом? , который объясняет разницу между этими двумя довольно хорошими.
Это можно решить, введя универсальный тип в вашу черту HashMapContainer
.
pub trait HashMapContainer<T> {
fn get_hash_map(&self) -> &HashMap<String, T>;
fn get_hash_map_mut(&mut self) -> &mut HashMap<String, T>;
}
Я изменил подпись, чтобы вернуть ссылку на HashMap
. Было бы возможно сделать это без, например, используя clone
или принимая self
в качестве значения, а не в качестве ссылки. Я также представил _mut
версию.
Реализация является прямым предисловием:
impl HashMapContainer<String> for HashMapContainerImpl1 {
fn get_hash_map(&self) -> &HashMap<String, String> {
&self.map
}
fn get_hash_map_mut(&mut self) -> &mut HashMap<String, String> {
&mut self.map
}
}
impl HashMapContainer<u8> for HashMapContainerImpl2 {
fn get_hash_map(&self) -> &HashMap<String, u8> {
&self.map
}
fn get_hash_map_mut(&mut self) -> &mut HashMap<String, u8> {
&mut self.map
}
}