我可能已经发现了之前发布的代码中的一个问题,“R:在randomForest()调用中使用带有sample()过程的foreach()”并且它与我用来绘制随机子样本的脚本相关数据框中的列。 假数据(下面)有19列,“A”到“S”,我想绘制5列的随机子集,但我想从绘图中排除第三列“C”。简单地从sample()调用的第一个参数中排除第三列不起作用(即,一些样本包含'C'列)。我希望有人建议如何做到这一点。这是不起作用的脚本:
randsCOLs= sample(1:dim(FAKEinput[,c(1:2,4:19)])[2], 5, replace=FALSE)
#randsCOLs= sample(dim(FAKEinput[,c(1:2,4:19)])[2], 5, replace=FALSE) - also doesn't work
out <- FAKEinput[,randsCOLs]
FAKEinput <-
data.frame(A=sample(25:75,20, replace=T), B=sample(1:2,20,replace=T), C=as.factor(sample(0:1,20,replace=T,prob=c(0.3,0.7))),
D=sample(200:350,20,replace=T), E=sample(2300:2500,20,replace=T), F=sample(92000:105000,20,replace=T),
G=sample(280:475,20,replace=T),H=sample(470:550,20,replace=T),I=sample(2537:2723,20,replace=T),
J=sample(2984:4199,20,replace=T),K=sample(222:301,20,replace=T),L=sample(28:53,20,replace=T),
M=sample(3:9,20,replace=T),N=sample(0:2,20,replace=T),O=sample(0:5,20,replace=T),P=sample(0:2,20,replace=T),
Q=sample(0:2,20,replace=T), R=sample(0:2,20,replace=T), S=sample(0:7,20,replace=T))
答案 0 :(得分:3)
如果我没有弄错的话,看起来排除dim()
通话就行了。
randsCOLs = sample(FAKEinput[-3], 5, replace=FALSE)
答案 1 :(得分:1)
以下是一种更通用的方法(如果C
列不是3rd
列)
FAKEinput[sample(which(names(FAKEinput) !='C'),5, replace=FALSE)]
或者您可以使用setdiff
FAKEinput[sample(setdiff(names(FAKEinput),'C'), 5, replace=FALSE)]
或者更改OP的1:dim
代码并假设C
是列3
FAKEinput[sample((1:dim(FAKEinput)[2])[-3], 5, replace=FALSE)]