【问题标题】:Creating multiple matrices with a "for" loop使用“for”循环创建多个矩阵
【发布时间】:2015-06-12 22:07:49
【问题描述】:

我目前正在学习多变量聚类和分类的统计课程。对于我们的作业,我们尝试使用 10 折交叉验证来测试不同分类方法在具有三个分类的 6 变量数据集上的准确度。我希望我能在创建 for 循环(或其他我不知道的更好的东西)上获得一些帮助来创建和运行 10 个分类和验证,这样我就不必在所有事情上重复自己 10 次....这就是我所拥有的。它会运行,但前两个矩阵只显示第一个变量。因此,我无法对其他部分进行故障排除。

index<-sample(1:10,90,rep=TRUE)
table(index)
training=NULL
leave=NULL
Trfootball=NULL
football.pred=NULL
for(i in 1:10){
training[i]<-football[index!=i,]
leave[i]<-football[index==i,]
Trfootball[i]<-rpart(V1~., data=training[i], method="class")
football.pred[i]<- predict(Trfootball[i], leave[i], type="class")
table(Actual=leave[i]$"V1", classfied=football.pred[i])}

删除“[i]”并用 1:10 替换它们现在可以单独工作....

【问题讨论】:

  • 什么是足球?你能展示它是什么以及它包含什么吗?
  • 我认为你可以创建Trfootballleavetrainingfootball.pred 等作为列表,即Trfootball &lt;- vector('list', 10),然后在for 循环中。使用[[i]](没有可重复的示例,未经测试)
  • 原始数据足球是一个 7x90 矩阵,第一列有 1-3 类,其余的有 6 个观察数据变量。这是足球数据的示例。 set.seed(90) v1=sample(1:3,90,rep=TRUE) v2=sample(3:46,90,rep=TRUE) v3=sample(7:20,90,rep=TRUE) v4=样品(6:12,90,rep=TRUE) v5=样品(5:15,90,rep=TRUE) v6=样品(11:15,90,rep=TRUE) v7=样品(1:18,90, rep=TRUE) 足球=cbind(V1,V2,V3,V4,V5,V6,V7)

标签: r matrix


【解决方案1】:

您的问题在于将data.framematrix 分配给您最初设置为NULLtrainingleave)的向量。一种思考方式是,您试图将整个矩阵压缩到一个只能采用单个数字的元素中。这就是为什么R 你的代码有问题。您需要将 trainingleave 初始化为可以处理值的迭代聚集的东西(@akrun 指出的 R 对象 list)。

以下示例应该让您了解正在发生的事情以及您可以采取哪些措施来解决您的问题:

a<-NULL # your set up at the moment
print(a) # NULL as expected
# your football data is either data.frame or matrix
# try assigning those objects to the first element of a:
a[1]<-data.frame(1:10,11:20) # no good
a[1]<-matrix(1:10,nrow=2) # no good either
print(a)

## create "a" upfront, instead of an empty object
# what you need: 
a<-vector(mode="list",length=10)
print(a) # empty list with 10 locations
## to assign and extract elements out of a list, use the "[[" double brackets
a[[1]]<-data.frame(1:10,11:20)
#access data.frame in "a"
a[1] ## no good
a[[1]] ## what you need to extract the first element of the list
## how does it look when you add an extra element?
a[[2]]<-matrix(1:10,nrow=2)
print(a) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2013-06-25
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多