您好我有一个关于将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(即我的循环没有工作)。我想它与索引有关,但我真的无法看到我做错了。
再次为一个不透明的问题道歉并感谢您一看!
答案 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)) { [...]