R 在这两种情况下,我的做法有什么不同?
我试图看看在下面的代码中生成的性能最好和最差的模型在伸缩方面的差异。就我所知,我对待bc和oc的情况是一样的(代码是用简单的字符串替换进行复制粘贴的)。然而,当我谈到oc案件的最后一行时,R说dims是错误的。R是对的,在oc情况下,缩放列表不是列表,而是矩阵,而在bc集合中,它们是列表。我在做什么,导致bc和oc的缩放列表具有不同的类型?就我所知,lda结果列表是相同的类型,当我手动访问缩放时,它们在每种情况下似乎都是相同的类型,但是当我将相同的函数应用于lda结果列表,以将缩放作为列表时,我会得到不同的类型R 在这两种情况下,我的做法有什么不同?,r,R,我试图看看在下面的代码中生成的性能最好和最差的模型在伸缩方面的差异。就我所知,我对待bc和oc的情况是一样的(代码是用简单的字符串替换进行复制粘贴的)。然而,当我谈到oc案件的最后一行时,R说dims是错误的。R是对的,在oc情况下,缩放列表不是列表,而是矩阵,而在bc集合中,它们是列表。我在做什么,导致bc和oc的缩放列表具有不同的类型?就我所知,lda结果列表是相同的类型,当我手动访问缩放时,它们在每种情况下似乎都是相同的类型,但是当我将相同的函数应用于lda结果列表,以将缩放作为列表时,我
library("MASS")
all<-read.csv("~/Documents/All BC OC Data.csv")
filtered<-all[,apply(!is.na(all),2,all)]
bc.list.of.lists = list();
for(i in 1:500){
bcnorm.orig <- subset(filtered,filtered$set %in% c('bc','normal'))
c <- nrow(bcnorm.orig[bcnorm.orig$set == 'bc',])
c2 <- nrow(bcnorm.orig)
pis <- c(2+sample(c-2,(c-2)/3),c+sample(c2-c,(c2-c)/3))
bcnorm <- bcnorm.orig[-pis,]
sds <- sapply(bcnorm,sd)
bcnorm <- bcnorm[,sds!=0]
bcpredict <- bcnorm.orig[pis,sds!=0]
sds <- sapply(bcpredict,sd)
bcnorm <- bcnorm[,sds!=0]
bcpredict <- bcpredict[,sds!=0]
met.lda.bc <- lda(as.formula(paste("bcnorm$set ~ bcnorm$", paste(names(bcnorm)[-c(1,2)], collapse = " + bcnorm$"))))
bcnorm <- bcpredict
met.lda.bc.values.predicted <- predict(met.lda.bc, as.data.frame(scale(bcnorm[-c(1,2)])))
wrong <- length(which(met.lda.bc.values.predicted$class != bcnorm$set))
bc.list.of.lists[[i]] <- list(wrong=wrong, lda=met.lda.bc)
}
bc.errors<-sapply(bc.list.of.lists, "[[", "wrong")
bc.first<-bc.list.of.lists[order(bc.errors)][1:10]
bc.first.ldas<-sapply(bc.first, "[[", "lda")
bc.first.scalings<-apply(bc.first.ldas, 2,function(x)x$scaling)
bc.first.scalings<-lapply(bc.first.scalings,function(x)x[,1])
oc.list.of.lists = list();
for(i in 1:500){
ocnorm.orig <- subset(filtered,filtered$set %in% c('oc','normal'))
c <- nrow(ocnorm.orig[ocnorm.orig$set == 'oc',])
c2 <- nrow(ocnorm.orig)
pis <- c(2+sample(c-2,(c-2)/3),c+sample(c2-c,(c2-c)/3))
ocnorm <- ocnorm.orig[-pis,]
sds <- sapply(ocnorm,sd)
ocnorm <- ocnorm[,sds!=0]
ocpredict <- ocnorm.orig[pis,sds!=0]
sds <- sapply(ocpredict,sd)
ocnorm <- ocnorm[,sds!=0]
ocpredict <- ocpredict[,sds!=0]
met.lda.oc <- lda(as.formula(paste("ocnorm$set ~ ocnorm$", paste(names(ocnorm)[-c(1,2)], collapse = " + ocnorm$"))))
ocnorm <- ocpredict
met.lda.oc.values.predicted <- predict(met.lda.oc, as.data.frame(scale(ocnorm[-c(1,2)])))
wrong <- length(which(met.lda.oc.values.predicted$class != ocnorm$set))
oc.list.of.lists[[i]] <- list(wrong=wrong, lda=met.lda.oc)
}
oc.errors<-sapply(oc.list.of.lists, "[[", "wrong")
oc.first<-oc.list.of.lists[order(oc.errors)][1:10]
oc.first.ldas<-sapply(oc.first, "[[", "lda")
oc.first.scalings<-apply(oc.first.ldas, 2,function(x)x$scaling)
oc.first.scalings<-lapply(oc.first.scalings,function(x)x[,1])
library(“MASS”)
所有结果表明,在大多数情况下,缩放的长度是不同的,因此Lappy制作了列表,当它们的长度都相同时,它就生成了矩阵
真的很烦人,很难追踪行为。你能把你的问题降到最低吗?它也是可复制的吗?这是我能得到的最小值,虽然它是可复制的(每次运行都会发生),但出于各种原因,我无法提供数据。