@@ -960,13 +960,16 @@ def assay(self, assay: Union[int, str]) -> Any:
960960 """Alias for :py:attr:`~assay`. For backwards compatibility"""
961961 return self .get_assay (assay )
962962
963- def set_assay (self , name : str , assay : Any , in_place : bool = False ) -> "BaseSE" :
963+ def set_assay (self , name : Union [ str , int ] , assay : Any , in_place : bool = False ) -> "BaseSE" :
964964 """Add or replace :py:attr:`~summarizedexperiment.BaseSE.BaseSE.assays`'s.
965965
966966 Args:
967967 name:
968968 New or existing assay name.
969969
970+ Alternatively, may provide an index position of the assay
971+ to replace.
972+
970973 assay:
971974 A 2-dimensional matrix represented as either
972975 :py:class:`~numpy.ndarray` or :py:class:`~scipy.sparse.spmatrix`.
@@ -991,7 +994,19 @@ def set_assay(self, name: str, assay: Any, in_place: bool = False) -> "BaseSE":
991994 output = self ._define_output (in_place )
992995 if in_place is False :
993996 output ._assays = output ._assays .copy ()
994- output ._assays [name ] = assay
997+
998+ if isinstance (name , int ):
999+ if name > len (output ._assays ):
1000+ raise IndexError ("'name' is greather than the number of assays." )
1001+
1002+ if name < 0 :
1003+ raise ValueError ("'name' cannot be less than 0." )
1004+
1005+ output ._assays [output .get_assay_names ()[name ]] = assay
1006+ elif isinstance (name , str ):
1007+ output ._assays [name ] = assay
1008+ else :
1009+ raise ValueError ("'name' must be either a string or an index value." )
9951010 return output
9961011
9971012 ##########################
0 commit comments