变量长度在R中不同

时间:2014-04-20 14:26:56

标签: r

尝试使用cv.lm函数时,我收到上述错误。请参阅我的代码

sample<-read.csv("UU2_1_lung_cancer.csv",header=TRUE,sep=",",na.string="NA")
  sample1<-sample[2:2000,3:131]
  samplex<-sample[2:50,3:131]
  y<-as.numeric(sample1[1,]) 
  y<-as.numeric(sample1[2:50,2]) 
  x1<-as.numeric(sample1[2:50,3])
  x2<-as.numeric(sample1[2:50,4])
  x11<-x1[!is.na(y)]
  x12<-x2[!is.na(y)]
  y<-y[!is.na(y)]
  fit1 <- lm(y ~ x11 + x12, data=sample)
  fit1
  x3<-as.numeric(sample1[2:50,5])
  x4<-as.numeric(sample1[2:50,6])
  x13<-x3[!is.na(y)]
  x14<-x4[!is.na(y)]
  fit2 <- lm(y ~ x11 + x12 + x13 + x14, data=sample)
  anova(fit1,fit2)
  install.packages("DAAG")
  library("DAAG")
  cv.lm(df=samplex, fit1, m=10) # 3 fold cross-validation

任何见解将不胜感激。

Example of data
ID       peak height     LCA001 LCA002  LCA003
N001786 32391.111   0.397   0.229   -0.281
N005356 32341.473   0.397   -0.655  -1.301
N002416 32215.474   -0.703  -0.214  -0.901
GS239   31949.777   0.354   0.118   0.272
N016343 31698.853   0.226   0.04    -0.006
N003255 31604.978   0.024    NA -0.534
N004358 31356.597   -0.252  -0.022  -0.407
N000122 31168.09    -0.487  -0.533  -0.134
GS10564 31106.103   -0.156  -0.141  -1.17
GS17987 31043.876    NA     0.253   0.553
N003674 30876.207   0.109   0.093   0.07

请参阅上面数据的示例

1 个答案:

答案 0 :(得分:1)

首先,您错误地使用lm(..),或者至少以非常规方式使用data=sample。指定sample参数的目的是使公式使用对## not tested... sample <- read.csv(...) colnames(sample)[2:6] <- c("y","x1","x2","x3","x4") fit1 <- lm(y~x1+x2, data=sample[2:50,],na.action=na.omit) library(DAAG) cv.lm(df=na.omit(sample[2:50,]),fit1,m=10) 的列的引用。通常,在公式引用中使用独立数据是一种非常糟糕的做法

所以试试这个:

na.action=na.omit

这将为列2:6提供适当的名称,然后使用公式中的名称。参数lm(...)告诉cv.lm(...)函数排除相关列的任何中存在NA值的所有行。这实际上是默认值,因此在这种情况下不需要,但为了清楚起见,包括在内。

最后,cv.lm(df=samplex, fit1, m=10) 使用它的第二个参数来查找公式定义,所以在您的代码中:

cv.lm(df=samplex,y~x11+x12,m=10)

相当于:

x11

由于x12中(可能)没有名为samplexcv.lm(...)的列,并且由于您在外部定义了这些向量,因此{{1}}会引发您获得的错误。