我在 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
。
这让我印象深刻 - 因为您最终正在寻找单个输出,而不是管道的分支 - 这是在目标内部更好地实现的东西,而不是使用
targets
来完成编程工作。
话虽这么说,这就是您要找的吗?
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()
的目标将返回一个命名向量。