2

嗨,我有一个关于将 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 (即我的循环没有工作)。我想这与索引有关,但我真的看不出我做错了什么。

再次为不透明的问题道歉,感谢您的关注!

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 回答