2

こんにちは、data.frames のリストを配列に変換することについて簡単な質問があります (プロットと操作には後者の形式を好みます)。

ほぼ機能する次のコードがありますが、ループが正しくないため、誰かが私が間違っていることを指摘できるかどうか疑問に思いました。

私がやりたいことは、data.frames のリスト内の異なる data.frames のそれぞれからの列の 1 つの値で配列を埋めることです。

# list all the files in a directory
data.dir = "/data/output"

# list all the files to plot
files <- list.files(data.dir, full=TRUE, pattern="Fields_grid*")

# cat them together into one data frame
data <- lapply( files,  read.csv, header=FALSE, skip=26)

# calc no. of files
nfiles <- length(files)

# set up an empty array to fill with data
z <- array( NA, dim=c(length(x), length(y), nfiles ))

# loop through all the data.frames/files 
for (i in 1:length(nfiles)) {

# calc index's of lists
x <- sort(unique( data[[i]]$V3))
y <- sort(unique( data[[i]]$V4))
indx <- match( data[[i]]$V3, x)
indy <- match( data[[i]]$V4, y)

# fill array
z[ cbind( indx, indy, i)] <- data[[i]]$V5 }

得られた結果を再現できないため、これがひどい質問であることは承知していますが、私の問題を理解していただければ幸いです。z[,,1] を見ると、これにはデータが含まれていますが、z[,,2] から z[,,nfiles] には NA が含まれています (つまり、ループが機能していません)。インデックス作成と関係があると思いますが、何が間違っているのか本当にわかりません。

わかりにくい質問で申し訳ありません。ご覧いただきありがとうございます。

4

1 に答える 1

3

問題はあなたのループにあります:

for (i in 1:length(nfiles)) { [...]

ここでlength(nfiles)1、あなたのループはiequalsに対してのみ実行され1ます。

代わりに、あなたはするつもりでした

for (i in 1:nfiles) { [...]

また

for (i in seq_len(nfiles)) { [...]

また

for (i in seq_along(files)) { [...]
于 2012-11-07T03:09:27.550 に答える