R将列表转换为数组

时间:2012-11-07 02:40:11

标签: r arraylist dataframe

您好我有一个关于将data.frames列表转换为数组的快速问题(我更喜欢后一种格式用于绘图和操作)。

我有以下代码可以正常工作,但我没有得到正确的循环,并想知道是否有人可以指出我做错了什么。

我想要做的是使用我的data.frames列表中每个不同data.frames中的一列的值填充一个数组。

# 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(即我的循环没有工作)。我想它与索引有关,但我真的无法看到我做错了。

再次为一个不透明的问题道歉并感谢您一看!

1 个答案:

答案 0 :(得分:3)

问题在于你的循环:

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

此处length(nfiles)1,因此您的循环仅适用于i等于1

相反,你打算做

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

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

for (i in seq_along(files)) { [...]