以动态分支为目标向矩阵添加列

问题描述 投票:0回答:1

我在 R 目标管道中有多个栅格,我使用

tar_files()
加载这些栅格,然后在下一个目标中对其进行迭代,以将每个文件的一列添加到矩阵中。但是,仅创建第一列。这是不使用文件的表示:

library(targets)

tar_script(
  {
    add_column <- function(letter) {
      matrix(rep(letter, 10), ncol = 1)
    }
    list(
      tar_target(letters, letters),
      tar_target(
        added_columns,
        add_column(letters),
        pattern = map(letters)
      )
    )
  },
  ask = FALSE
)
tar_make()

如何获得每次迭代都有一列的矩阵?

当我使用

tar_load(add_columns)
加载结果时,它只有第一列。在使用栅格的情况下,我使用
terra::extract
为每次迭代获取一个向量,当我加载结果时,除了第一个之外,还有所有列,但都填充了
NA

r target ropensci targets-r-package
1个回答
1
投票
  1. 这让我印象深刻 - 因为您最终正在寻找单个输出,而不是管道的分支 - 这是在目标内部更好地实现的东西,而不是使用

    targets
    来完成编程工作。

  2. 话虽这么说,这就是您要找的吗?

library(targets)
tar_script(
  {
    add_column <- function(letter) {
      matrix(rep(letter, 10), ncol = 1)
    }
    list(
      tar_target(
        name = letters, 
        command = letters
        ),
      tar_target(
        name = added_columns,
        command = add_column(letters),
        pattern = map(letters)
      ),
      tar_target(
        name = mat,
        command = matrix(added_columns, ncol = 10, byrow = TRUE),
      )
    )
  },
  ask = FALSE
)
tar_make()
tar_load(mat)

在默认设置下,

tar_target()
使用
iteration = "vector"
,因此使用
pattern = map()
的目标将返回一个命名向量。

© www.soinside.com 2019 - 2024. All rights reserved.