复R - 函数/循环

时间:2013-04-18 10:03:49

标签: r function loops

这是一场充满挑战但又安静有趣的冲突...... 我希望我能真的做到这一点,希望有人可以帮助我在这里

这是" R"

这是我正在运行的代码,用于从训练中获得X1的R平方

model=randomForest(X1~.,data=training,importance=TRUE,keep.forest=TRUE)
predicted=predict(model,newdata=testing[,-1])
actual=testing$X1
rsq=1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
print(rsq)

这是培训主管,让您知道它的样子

head(training)
        X1        X2        X3         X4        X5         X6
68   -3.556526  4.588409 -2.756521  -2.742035 11.542023 -18.405807
23   -1.915947 -0.179710 -0.240580  -0.278259 -0.284058   0.553627
129 -24.252174 -4.869564  4.800001 -14.608688  5.255074 -20.228981
5    -1.637680 -1.147827 -2.005795  -1.121750  0.101440  -1.608688
147 -68.289856 -0.626083 19.933334  -6.637680 15.379715 -11.515945

最多有X77其中一个,其中行数为73.

我的目标是制作一个循环

model=randomForest(X1~.,data=training,importance=TRUE,keep.forest=TRUE)
predicted=predict(model,newdata=testing[,-1])
actual=testing$X1
rsq=1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
print(rsq)

最高为X77

所以

model=randomForest(X77~.,data=training,importance=TRUE,keep.forest=TRUE)
predicted=predict(model,newdata=testing[,-77])
actual=testing$X77
rsq=1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
print(rsq)

所以我可以达到77平方英尺

我的最终目标只是采取那些77 r平方的意思


到Maxim.K和其他人

rsq=function(i){
model=randomForest(testing[,1]~.,data=training,importance=TRUE,keep.forest=TRUE)
predicted=predict(model,newdata=testing[,-i])
actual=testing[,i]
1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
}

rsq=function(i){
model=randomForest(Xi~.,data=training,importance=TRUE,keep.forest=TRUE)
predicted=predict(model,newdata=testing[,-i])
actual=testing[,i]
1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
}

我知道第二个逻辑上没有意义,但这就是我需要的。 因此测试$ X1正在测试[,1],但它不会进行测试[,1] 我必须把它放在" X1"

的形式

我该怎么做......?

1 个答案:

答案 0 :(得分:2)

我认为Maxim.K已经提到了这一点,但这样的事情会起作用

rsq = function(i) {
  n = colnames(testing)[i]
  model=randomForest(as.formula(paste(n,"~.")),data=training,importance=TRUE,keep.forest=TRUE)
  predicted=predict(model,newdata=testing[,-i])
  actual=testing[[n]]
  1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
}
sapply(1:77, rsq)