1

Rを使用して、必要な数のユーザー入力ファイルを受け入れ、それらのファイルを取得して、14列目に格納されている値のファイルごとに1つのヒストグラムを作成しようとしています。私はこれまでに得ました:

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) 表示されるエラーは2つのうちの1つです。行が上記のように読み取られる場合、エラーは次のとおりです。

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

これは一般的な問題ですか?誰かが私にそれを説明できますか?私はRにあまり詳しくありませんが、学び続けたいと思っています。ありがとう編集:再現性のために、私が実行した場合:

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

結果は次のとおりです。

   > 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
4

1 に答える 1

1

ここで何をしようとしていますか?

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を再定義すると、機能します。

dat <- list(file1 = data.frame("column14","iforgotcolumn2"),
            file2 = data.frame("column14","iforgotcolumn2"),
            file3 = data.frame("column14","iforgotcolumn2"),
            file4 = data.frame("column14","iforgotcolumn2"))
于 2012-08-13T21:49:27.700 に答える