'sparcl'包使用标准'stat'包中的'kmeans'函数.我想让它使用我自己的kmeans ++实现.
一种方法是编辑sparcl包本身的代码.我宁愿避免这种情况,因为它会很混乱,因为我不确定如何在R中安装编辑过的代码.
不幸的是,超级运算符"<< - "不起作用:
> kmeans <<- function(x) print("hi!")
Error: cannot change value of locked binding for 'kmeans'
Run Code Online (Sandbox Code Playgroud)
也没有"分配":
assign("kmeans",function(x) {print("HI THERE!"); return(FALSE)},pos="package:sparcl")
Error in assign("is.null", function(x) { :
cannot add bindings to a locked environment
Run Code Online (Sandbox Code Playgroud)
那么编辑包代码是唯一的方法吗?
谢谢!
我们X是一个N由D矩阵.选择大小的子矩阵n由d返回那些维度的矩阵,除非中的至少一个n和d等于1,在这种情况下,我们得到的载体代替.有趣的是,R仍返回正确的尺寸即使一个的矩阵n和d是0,并且另一个不是 1.
现在,如果我们确定n!=1,那么执行cbind(X[row.subset,col.subset])将返回正确维度的矩阵,无论是否d==1(此处n=length(row.subset)和d=length(col.subset)).如果我们确定d!=1,那么我们就可以使用rbind(...).但是,如果双方n并d可以是1,两个策略都不成功,因为我们可能会意外地把行插入列,反之亦然.
据我所知,总是得到正确尺寸矩阵的一种方法是调用matrix(X[row.subset,col.subset],nrow=n,ncol=d).但是,它并不觉得这应该是正确的方法,而且我不相信没有性能损失.有更"原生"的解决方案吗?
这是一个有效的例子:
N <- 6
D <- 3
X <- matrix(rnorm(N*D),ncol=D)
dim(X[1:2,1:2]) #returns 2 2
dim(X[1:2,1]) #returns NULL, this is a vector
dim(cbind(X[1:2,1])) #returns 2 1
dim(cbind(X[1,1:2])) #returns 2 1, but we'd like it to be …Run Code Online (Sandbox Code Playgroud)