我正在尝试使用
{pointblank}
包来验证 {targets}
管道中的某些数据,但不断收到错误,提示找不到要操作的数据对象。当我执行行 validate_data(my_data, yaml_file)
时,它会产生预期的输出。
以下为有限表述:
library(targets)
library(tarchetypes)
library(pointblank)
library(data.table)
validate_data <- function(my_data, qc_yaml_file) {
yaml_read_agent(qc_yaml_file) |>
interrogate()
}
create_agent(
tbl = ~ my_data,
label = "check on mtcars",
actions = action_levels(
warn_at = 0.10,
stop_at = 0.25
)
) |>
col_exists(columns = c(cyl, vs, am, gear, carb)) |>
yaml_write(filename = "check_mtcars.yaml")
# Run the R scripts in the R/ folder with your custom functions:
tar_source()
# Replace the target list below with your own:
tar_plan(
my_data = setDT(copy(mtcars)),
tar_file(
yaml_file,
"check_mtcars.yaml"
),
tar_target(
qc_results,
validate_data(my_data, yaml_file)
)
)
由
create_agent
管道生成的 yaml 文件如下所示:
type: agent
tbl: ~my_data
tbl_name: ~my_data
label: check on mtcars
lang: en
locale: en
actions:
warn_fraction: 0.1
stop_fraction: 0.25
steps:
- col_exists:
columns: c(cyl, vs, am, gear, carb)
任何关于为什么目标管道找不到
my_data
对象的指导将不胜感激。
因此,只要有副作用,使用
{targets}
就会变得很棘手,所以我建议避免依赖.yaml
文件:
library(targets)
library(pointblank)
library(data.table)
wrapper_create_agent <- function(dataset){
create_agent(
tbl = dataset,
tbl_name = "my_data",
label = "check on mtcars",
actions = action_levels(
warn_at = 0.10,
stop_at = 0.25
)
) |>
col_exists(columns = c(cyl, vs, am, gear, carb))
}
# Replace the target list below with your own:
list(
tar_target(
my_data,
setDT(copy(mtcars))
),
tar_target(
my_agent,
wrapper_create_agent(my_data)
),
tar_target(
qc_results,
interrogate(my_agent)
)
)
然后您可以使用
tar_read(qc_results)
检查结果