【问题标题】:write binary files in different directories after manipulating them?操作后将二进制文件写入不同的目录?
【发布时间】:2013-03-08 22:46:06
【问题描述】:

我有 4 个文件作为矩阵 586 *1383 在一个名为 list1 的文件夹中,其他 4 个文件作为矩阵在另一个名为 list2 的文件夹中(list1 和 flist2 具有相同的尺寸)。

我想根据文件夹 list2 中的文件过滤文件夹 list1 中的文件。因此,每当文件夹 list1 像素中的相应文件的值大于 1000 时,我想用 NA 替换文件夹 list2 中的文件中的值。

:这里是要下载的文件:

1- 我试过这个循环,但是当我写结果时,我得到了一些奇怪的东西,这意味着我的循环不正确,结果是大小为 1kb 的文件而不是矩阵(正确的大小应该是 3166kb)。我很感激任何帮助来纠正我的循环。

dir1<- list.files("C:\\list1", "*.img", full.names = TRUE)
dir2<- list.files("C:\\list2", "*.img", full.names = TRUE)
 results<- list()
for (.files in seq_along(dir1)){
      list1 <- readBin(dir1[.files], numeric(), size = 4, n = 1383*586, signed = TRUE)   
      list2 <- readBin(dir2[.files], integer(), size = 2, n = 1383*586, signed = TRUE)                  
      results[[length(results) + 1L]]<- list1[list2 > 1000] <- NA}

     for (i in seq_along(results)){
     fileName <- sprintf("C:\\NewFile%03d.bin", i)
     writeBin(as.double(results[[i]]), fileName, size = 4)}

2- 谁能告诉我什么代码有问题?

【问题讨论】:

  • 你为文件夹命名file1让我哭了一会儿! :) ("文件夹 file1 中的文件基于文件夹 file2 中的文件")
  • @Arun 相应编辑
  • 不,没关系。我花了一段时间才得到它。当我读到我引用的那句话时,它让我笑了……:)
  • 抱歉,为什么在你加载list2的行的末尾有一个}
  • 很抱歉让您感到困惑。我把它放在那里了

标签: r


【解决方案1】:

正如我上面评论的,问题出在这行:

results[[length(results) + 1L]]<- list1[list2 > 1000] <- NA

这一行将NA 分配给list1[list2 &gt; 1000] results[[length(results) + 1L]]。我会将它们分成两行,如下所示:

list1[list2 > 1000] <- NA
results[[length(results) + 1L]] <- list1

另外,一个建议。让您的列表每次都“增长”是不明智的。由于您已经知道列表的大小,因此最好将它们分配在 results before for 循环中。因为,如果不是,每次分配results[[length(results) + 1]] 时,它都会复制整个对象以创建另一个元素,并且随着列表变长,它会非常慢。所以,要实现它就像这样:

results <- vector("list", length(dir1)) # create list with required size ( values set to NULL)
> length(results)
# [1] 4

for( i in seq_along(dir1)) {
    # load list1
    # load list2
    # assign NA
    results[[i]] <- list1 # assign using index i, all values of i exists, 
                          # as they are already assigned.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多