docs: def fs_r(self, percent=0.9, N=None):
  		"""Get the row factor scores (dimensionality-reduced representation),
  		choosing how many factors to retain, directly or based on the explained
  		variance.
  
  		'percent': The minimum variance that the retained factors are required
  								to explain (default: 90% = 0.9)
  		'N': The number of factors to retain. Overrides 'percent'.
  				If the rank is less than N, N is ignored.
  		"""
  		if not 0 <= percent <= 1:
  			raise ValueError("Percent should be a real number between 0 and 1.")
  		if N:
  			if not isinstance(N, (int, int64)) or N <= 0:
  				raise ValueError("N should be a positive integer.")
  			N = min(N, self.rank)
  		self.k = 1 + flatnonzero(cumsum(self.L) >= sum(self.L)*percent)[0]
  		#  S = zeros((self._numitems, self.k))
  		# the sign of the square root can be either way; singular value vs. eigenvalue
  		# fill_diagonal(S, -sqrt(self.E) if self.cor else self.s)
  		num2ret = N if N else self.k
  		s = -sqrt(self.L) if self.cor else self.s
  		S = diagsvd(s[:num2ret], self._numitems, num2ret)
  		self.F = self.D_r.dot(self.P).dot(S)
  		return self.F