2012-08-13 3 views
1

R을 사용하여 필요한만큼 많은 사용자 입력 파일을 허용하고 해당 파일을 가져 와서 14 번째 열에 저장된 값 중 하나의 파일마다 하나의 막대 그래프를 만들려고합니다. 내가 여기까지 입수했습니다 :lapply and data.frame in R

library("tcltk") 
library("grid") 
File.names<-(tk_choose.files(default="", caption="Choose your files", multi=TRUE, filters=NULL, index=1)) 
Num.Files<-NROW(File.names) 
test<-sapply(1:Num.Files,function(x){readLines(File.names[x])}) 
data<-read.table(header=TRUE,text=test[1]) 
names(data)[14]<-'column14' 
dat <- list(file1 = data.frame("column14"), 
      file2 = data.frame("column14"), 
      file3 = data.frame("column14"), 
      file4 = data.frame("column14")) 
#Where the error comes up 
tmp <- lapply(dat, `[[`, 2) 
lapply(tmp, function(x) {hist(x, probability=TRUE, main=paste("Histogram of Coverage")); invisible()}) 
layout(1) 

내 코드 tmp <- lapply(dat,를 상태 라인에 불구하고 끊 [[, 2) 온다 오류는 두 가지 중 하나입니다. 라인이 위와 같이 읽는 경우 오류가 이것이다 : 나는 몇 가지 조사를하고이 발생 될 수 있음을 발견

Error in .subset2(x, i, exact = exact) : subscript out of bounds 
Calls: lapply -> FUN -> [[.data.frame -> <Anonymous> 

이중 그래서 나는 것 있는지 확인하기 위해 tmp <- lapply(dat, [ , 2)로 변경 [[]]

Error in `[.data.frame`(X[[1L]], ...) : undefined columns selected 
Calls: lapply -> FUN -> [.data.frame 

입력 모두가이 패턴을 따를 파일 :

Targ cov av_cov 87A_cvg 87Ag 87Agr 87Agr 87A_gra 87A%_1 87A%_3 87A%_5 87A%_10 87A%_20 87A%_30 87A%_40 87A%_50 87A%_75 87A%_100 
1:028 400 0.42 400 0.42 1 1 2 41.8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
1:296 400 0.42 400 0.42 1 1 2 41.8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 

이 t인가 (많은 자습서는 수도 말했듯이) 좋은 작업을 수행하지만 그냥이 오류가 발생 그의 일반적인 문제? 아무도 나에게 설명 할 수 있을까? 나는 R에 너무 익숙하지 않지만 계속 학습하기를 희망합니다. 감사 편집 : 재현성 , 내가 실행하는 경우 : 당신이 여기서 뭘하려고 무엇

> head(test) 
    [,1]                                    
[1,] "Targ cov av_cov 87A_cvg 87Ag 87Agr 87Agr 87A_gra 87A%_1 87A%_3 87A%_5 87A%_10 87A%_20 87A%_30 87A%_40\t87A%_50\t87A%_75\t87A%_100" 
[2,] "1:028 400\t0.42\t400\t0.42\t1\t1\t2\t41.8\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0"               
[3,] "1:296 400\t0.42\t400\t0.42\t1\t1\t2\t41.8\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0"               
[4,] "1:453 1646\t8.11\t1646\t8.11\t7\t8\t13\t100.0\t100.0\t87.2\t32.0\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0"             
[5,] "1:427 1646\t8.11\t1646\t8.11\t7\t8\t13\t100.0\t100.0\t87.2\t32.0\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0"             
[6,] "1:736 5105\t29.68\t5105\t29.68\t14\t29\t48\t100.0\t100.0\t100.0\t86.0\t65.7\t49.4\t35.5\t16.9\t0.0\t0.0"           
> head(data) 
[1] Targ  cov  av_cov X87A_cvg X87Ag  X87Agr X87Agr.1 
[8] X87A_gra X87A._1 X87A._3 X87A._5 X87A._10 X87A._20 X87A._30 
[15] X87A._40 X87A._50 X87A._75 X87A._100 
<0 rows> (or 0-length row.names) 
> x <- list(mtcars, mtcars, mtcars);lapply(x, head) 
[[1]] 
        mpg cyl disp hp drat wt qsec vs am gear carb 
Mazda RX4   21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 
Mazda RX4 Wag  21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 
Datsun 710  22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 
Valiant   18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 

[[2]] 
        mpg cyl disp hp drat wt qsec vs am gear carb 
Mazda RX4   21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 
Mazda RX4 Wag  21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 
Datsun 710  22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 
Valiant   18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 

[[3]] 
        mpg cyl disp hp drat wt qsec vs am gear carb 
Mazda RX4   21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 
Mazda RX4 Wag  21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 
Datsun 710  22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 
Valiant   18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 

> head(dat) 
$file1 
    X.column14. 
1 column14 

$file2 
    X.column14. 
1 column14 

$file3 
    X.column14. 
1 column14 

$file4 
    X.column14. 
1 column14 

> tmp <- lapply(dat, `[`, 2) 
Error in `[.data.frame`(X[[1L]], ...) : undefined columns selected 
Calls: lapply -> FUN -> [.data.frame 
Execution halted 
+0

재현성있는 데이터가 없으면 쉽게 해결할 수 있습니다. 그러나 쉽게 도움을 줄 수는 없습니다. 'lapply (dat, head)'를 사용하면 이것을 처리 할 수있다. 'mtcars'를 사용하면'x <- list (mtcars, mtcars, mtcars); lapply (x, head)'와 같이 작동합니다. 그렇게함으로써 우리는'dat'이 어떻게 생겼는지, 그리고 도움을 제공하는 방법을 알 수 있습니다. 재현 가능한 예제를 만드는 방법에 대한 자세한 내용은 다음을 참조하십시오. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

+1

'dat'의 값을 즉시 검사합니다. 당신은 그것을 정의합니다. 당신이 기대하는 바가 아니라는 것을 알게 될 것입니다. 이렇게하려면'str (dat)'또는'head (dat)'을 사용하십시오. – Andrie

+0

@TylerRinker 재현 가능하도록 정보를 추가했습니다. – Stephopolis

답변

1

:

head(test) 
head(data) 
x <- list(mtcars, mtcars, mtcars);lapply(x, head) 
head(dat) 

이 결과는?

tmp <- lapply(dat, `[[`, 2) 

lapply 기능이 작동하지 않습니다

list(file1=dat[[1]][[2]], 
    file2=dat[[2]][[2]], 
    file3=dat[[3]][[2]], 
    file4=dat[[4]][[2]]) 

에 해당합니다. 1 열만있는 데이터 프레임에서 2 열을 추출하려고합니다.

이렇게 재정의하면 작동합니다.

dat <- list(file1 = data.frame("column14","iforgotcolumn2"), 
      file2 = data.frame("column14","iforgotcolumn2"), 
      file3 = data.frame("column14","iforgotcolumn2"), 
      file4 = data.frame("column14","iforgotcolumn2"))