我正在尝试为出色的 NMF 包制作 Python 接口 - https://cran.r-project.org/web/packages/NMF/NMF.pdf(因为它比 Python 选项灵活得多)。到现在为止还挺好。
我想出了这样的事情:
# Python rpy2
__NMF = importr("NMF")
n_comp_R = robjects.IntVector(n_components)
nmf_ro = self.__NMF.nmf(data, n_comp_R, methods, self.seed, nrun=10)
它就像一个魅力。方法是我可以使用的可能算法的列表:
nmf算法()
[1] “深色” “KL” “李” “Frobenius” “偏移”
[6]“nsNMF”“ls-nmf”“pe-nmf”“siNMF”“snmf/r”
[11] "snmf/l"
其他可能性是使用自定义算法,如 NMF 文档中所述
# R code
my.algorithm <- function(x, seed, param.1, param.2) {
# do something with starting point ...
# return updated starting point
return(seed)
}
res <- nmf(data, n_comp, my.algorithm)
我怎样才能重现这个使用rpy2
?
我试过类似的东西:
import rpy2.robjects as robjects
my_algorithm = robjects.r('''
function (x, seed, scale.factor = 1)
{
pca <- prcomp(t(x), retx = TRUE)
factorization.rank <- nbasis(seed)
cat(seed)
basis(seed) <- abs(pca$rotation[, 1:factorization.rank])
coef(seed) <- t(abs(pca$x[, 1:factorization.rank]))/scale.factor
return(seed)
}
''')
nmf_ro = __NMF.nmf(data, n_comp_R, my_algorithm.r_repr(), nrun=1)
但它并没有创造魔法=(
NMF 算法 - 键“key=function (x, seed, scale.factor >= 1) 没有匹配条目
{
pca <- prcomp(t(x), retx = TRUE)
factorization.rank <- nbasis(种子)
猫(种子)
基础(种子)<- 绝对值(pca$rotation[, 1:factorization.rank])
coef(seed) <- t(abs(pca$x[, 1:factorization.rank]))/scale.factor
返回(种子)
}”在注册表中。
使用以下之一:'brunet'、'Frobenius'、'KL'、'lee'、'ls-nmf'、'.M#brunet'、'nsNMF'、'offset'、'pe-nmf'、'.R #brunet'、'.R#lee'、'.R#nsNMF'、'.R#offset'、'siNMF'、'.siNMF'、'snmf/l'、'snmf/r'。
警告.warn(x, RRuntimeWarning)
我想知道是否有人可以在这里帮助我?