我的问题类似于this one:我需要在var rangeSlider = document.getElementById('weight');
noUiSlider.create(rangeSlider, {
start: [ 0 ],
range: {
'min': [ 1 ],
'max': [ 10 ]
}
});
rangeSlider.noUiSlider.on('slide', function(values, handle){
var v = values[handle],
s = v * 10,
l = 50;
$(rangeSlider).find('.noUi-handle').css({"background-color":"hsl(10," + s + "%," + l +"%)"})
});
和data.frame
之间创建所有组合,但我需要一个多列数据框架的解决方案,所以我可以减少更大问题的计算时间。
我正在寻找的例子:
我需要创建vector
与自身的组合三次,但最后,我只需要总1:3
小于5的组合。
这样做的一种方法是简单地使用sum
并最终使用27种组合,然后只有4种符合我的和规则的组合。
expand.grid
效果很好,但对于较大的矢量或多个组合,而不是仅仅3,需要大量处理。我认为另一种方法是分割任务并在每个步骤中应用过滤器:
> x = 1:3
> b = expand.grid(x,x,x)
> rows = apply(b,1,sum)
> sum(rows < 5)
[1] 4
# Which rows obey the rule
> b[rows<5,]
Var1 Var2 Var3
1 1 1 1
2 2 1 1
4 1 2 1
10 1 1 2
然后从> x = 1:3
> a = expand.grid(x,x)
> rows = apply(a,1,sum)
> sum(rows < 5)
[1] 6
# Which rows obey the rule
> a[rows<5,]
Var1 Var2
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
7 1 3
获取这6行,并将它们与a
合并,然后根据我的规则再次对其进行分组,但我不知道如何合并x
和a
答案 0 :(得分:1)
您可以在行号上expand.grid
和cbind
在一起
expand.grid.XY <- function(X,Y) {
X<-as.data.frame(X);
Y<-as.data.frame(Y);
idx<-expand.grid(1:nrow(X),1:nrow(Y));
cbind(X[idx[,1],,drop=FALSE],Y[idx[,2],,drop=FALSE])
}
举个例子,
expand.grid.XY(a[rows<5,],x)
Var1 Var2 Y 1 1 1 1 2 2 1 1 3 3 1 1 4 1 2 1 5 2 2 1 7 1 3 1 1.1 1 1 2 2.1 2 1 2 3.1 3 1 2 4.1 1 2 2 5.1 2 2 2 7.1 1 3 2 1.2 1 1 3 2.2 2 1 3 3.2 3 1 3 4.2 1 2 3 5.2 2 2 3 7.2 1 3 3
但是,根据问题的性质,您可能需要查看foreach
包,其中包含when
过滤器和并行处理功能。