1

RのファイルをM×Nの行列に読み込みたいのですが。

ファイルの形式は次のとおりです。

# /n/home11/tros/sar/tests/mars/abro 250
# /n/home11/tros/sar/tests/mars/abro 230
# /n/home11/tros/sar/tests/mars/abro 20
# /n/home11/tros/sar/tests/mars/abro 20
# T (M rows,N cols)
# M 3
# N 4
7.947363550e+03 1.066183995e+04 3.896434554e+03 8.319875735e+03
1.600281531e+04 1.991086422e+04 1.628421819e+03 1.239507171e+04 
7.430547003e+03 2.349262184e+03 4.883555574e+03 4.986597752e+02

最初の行(#記号の付いたすべての行)はスキップする必要がありますが、MとNは(潜在的に)ヘッダー(#の付いた行)行から読み取ることができます。

次に、次元M x N(この場合は3 x 4)の数値行列を読み取る必要があります。区切り文字は単なるスペース(タブではない)であることに注意してください。

ありがとう。

4

2 に答える 2

4

read.tableデフォルトで始まる行をスキップ#します:

s <- "# /n/home11/tros/sar/tests/mars/abro 250
# /n/home11/tros/sar/tests/mars/abro 230
# /n/home11/tros/sar/tests/mars/abro 20
# /n/home11/tros/sar/tests/mars/abro 20
# T (M rows,N cols)
# M 3
# N 4
7.947363550e+03 1.066183995e+04 3.896434554e+03 8.319875735e+03
1.600281531e+04 1.991086422e+04 1.628421819e+03 1.239507171e+04 
7.430547003e+03 2.349262184e+03 4.883555574e+03 4.986597752e+02
"

read.table(header=FALSE, text=s)
##          V1        V2       V3         V4
## 1  7947.364 10661.840 3896.435  8319.8757
## 2 16002.815 19910.864 1628.422 12395.0717
## 3  7430.547  2349.262 4883.556   498.6598

使用するのではなく、データを読み取るためのファイル名text=を使用して指定することをお勧めします。file=

于 2013-01-18T06:05:06.410 に答える
0
Lines <- readLines(s)
M <- as.numeric( sub("^#\\sM" ,"" , Lines[grep("^#\\sM",Lines)]) )
M
#[1] 3
N <- as.numeric( sub("^#\\sN" ,"" , Lines[grep("^#\\sN",Lines)]) )
 dat <- read.table(text=Lines[grep("^[^#]",Lines)]) 
 dat
         V1        V2       V3         V4
1  7947.364 10661.840 3896.435  8319.8757
2 16002.815 19910.864 1628.422 12395.0717
3  7430.547  2349.262 4883.556   498.6598
于 2013-01-18T06:40:55.323 に答える