问题标签 [targets-r-package]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
120 浏览

r - 使用 R 目标将新数据附加到现有数据

我正在使用targets工作流管道。此管道的一部分是监视 csv 文件目录的更新。这个目录有10000多个csv文件,每周都会增加新文件。我希望能够识别新添加的文件并将它们附加到现有的一组*.rds文件中。最简单的方法是重新运行*.rds每周创建 5 个文件子集的过程,但这需要时间。有效的方法是识别新添加的文件,并且只需bind_rows使用正确的rds文件。

dir()我可以通过使用and的典型编程很容易地做到这一点setdiff(),我在其中存储前一天的 csv 文件路径的快照。但我正在努力在targets框架内实现这一目标。

这是一个似乎不起作用的尝试。我想我想监视/_targets目录中的临时结果,但我不确定如何去做。而且,targets文档建议不要tar_load在目标配置本身内部使用。

0 投票
1 回答
129 浏览

r - 您如何使用“targets”包的交互式 R Markdown 功能

我正在尝试使用targetsR 中的包提供的交互式 Markdown 功能(更多信息:https ://books.ropensci.org/targets/markdown.html )。我正在使用模板 R Markdown 文件,它构建了一个用于分析airquality数据集的管道。在手册的第3.6 节 Globals中,它说我可以运行some-globals目标块tar_interactive = TRUE并且应该得到消息:#> Run code and assign objects to the environment. 但是,此消息不会出现(没有消息出现)。

在执行第3.7 节目标定义时,会出现类似的问题。当我raw-data在 ( ) 上以交互模式运行块时tar_interactive = TRUE,手册说目标的 R 命令运行,执行了一些检查,并且#> Run code and assign objects to the environment应该出现相同的消息 ( )。此外,它表示返回值在内存中可用,并且普通的 R 代码块可以读取所述对象。提供的示例是一个 R 代码块,带有head(raw_data). 同样,当我运行块并且内存中没有可供读取的对象时,该消息Run code and assign...不会出现。相反,这是我运行块时在 R Studio 的 R 控制台中显示的输出:raw-dataraw_datahead(raw_data)raw-data

所以交互模式似乎不像手册中描述的那样工作。只要所有目标块都设置为tar_interactive = FALSE. 起初我想也许我必须在非交互模式下编织文档,然后,因为目标将在由设置的缓存中targets,我可以在交互模式下访问对象,但这也不起作用(如果它确实有效,它似乎会破坏首先在交互模式下对管道进行原型设计的目的)。我错过了什么吗?

0 投票
0 回答
39 浏览

r - R 目标和 dataRetrieval 返回连接错误

我正在尝试在我的 R 项目中使用目标工作流。我正在尝试使用 dataRetrieval 包下载水质数据。在新的 R 会话中,这有效:

要在目标中使用它,我有以下 _targets.R 文件:

当我运行tar_make()以下返回:

我尝试使用tar_option_set(debug = "wqp_data")or进行调试,tar_option_set(workspace_on_error = TRUE)但在将错误隔离为readWQPdata()没有得到任何地方之外。

我在目标中直接使用 curl 也取得了成功,所以我认为这不是我的实际互联网连接:

在使用这两个软件包时如何诊断连接问题有什么建议吗?

0 投票
1 回答
22 浏览

targets-r-package - 在目标包中使用 callr_function = NULL 的含义

我想知道当 callr_function = NULL 时会发生什么?是否只是环境/副作用中的问题?

主要是想知道,因为我传递了相当大的时空数组(0.5 到 5 gigs),并且通过 saveRDS 的调用者序列化非常慢。

我正在考虑的两件事是分叉 callr 并放入不同的保存函数或仅使用 callr_function = NULL。

0 投票
1 回答
48 浏览

r - 当我有多个数据文件时,我应该如何使用 {targets}

我有大约 50 个数据文件(主题),在将它们组合到 data.frame 中进行建模之前,我会单独处理它们。我不确定如何最好地使用 {targets} 。

我尝试使用动态分支,但我不确定如何使用这种方法跟踪主题 ID。在我目前的方法中,我将所有数据放在一个命名列表中,其中一级名称是主题 ID,但对于目标,名称是任意的。

我知道这并不是一个真正的具体问题,但我希望被指出一个适当的解决方案,而不是为一个错误的问题得到一个“正确”的答案。

0 投票
0 回答
110 浏览

r - R {targets} 包:如何使用字符串引用现有目标?

我正在使用该{targets}软件包,尝试根据现有目标创建新目标。虽然通过以 NSE 样式键入现有目标的名称来引用现有目标很简单,但我无法通过使用字符串作为“别名”来做到这一点。

只是为了清楚我在说什么。我将首先说明我在-land 之外的意思。如果我们创建一个数据对象,例如:{targets}

我们可以通过输入不带引号的名称来获取它:

或作为字符串使用get()

如果,无论出于何种原因,我们想my_vec在调用它时使用“别名”,一种方式(在众多方式中)可能是:

所以总结一下这个小介绍:我可以直接用它的名字来调用同一个对象:

  • my_vec; 或者
  • get("my_vec")

或者间接使用它的别名"the_1_to_10_vector"via get_object_from_alias()

{targets}上下文中

这是一个可重现的示例。清楚地表达我的问题的底线在最后。

1.为了保持干净,让我们创建一个新的 R 项目并加载 Rstudio。

2.现在我们应该在一个新的 RStudio 窗口中,它是my_reproducible_project.Rproj 的一部分。

3.打开一个新的 R markdown 文件。

4.以下块设置文件并创建“目标”。

5.此时,如果我们运行上面的代码,它应该创建 3 个目标:

  • raw_data
  • filtered_data_ozone
  • filtered_data_solar_r

它们不在环境中,而是作为.rds文件保存在项目目录中。我们可以使用tar_read(). 如果不将它们分配给对象,它只会将它们打印到控制台:

到目前为止,一切都很好!我的问题来了,我现在想通过 间接
引用filtered_data_*目标来创建一个新目标(就像我在本文开头使用“the_1_to_10_vector”别名一样)。

直接方法没有问题:

但是使用“别名”是行不通的filtered_data_solar_rfiltered_data_ozone

如果我们定义一个用于交换别名的实用函数:

当我们在内部使用它时它不会起作用tar_target(),即使在将字符串转换为符号时也是如此。

错误:调用子进程失败:没有适用于“inner_join”的方法应用于“名称”类的对象

0 投票
0 回答
84 浏览

r - 如何使用基于现有目标的 `targets::tar_target()` 创建新目标时使用迭代

{targets}在数据分析项目中使用该包,我需要从远程 Oracle 数据库中获取数据集。

我的首要任务是双重的:

  1. 从分散在 Oracle DB 中的不同视图表中获取数据。
  2. 根据我从 Oracle 提取的数据计算和整理一个新的数据列。
  • 这些计算列虽然来自不同的数据库表,但确实有足够的共同点,因此我可以通过一些相关的索引列合并它们。

我计算的每个新列都是一个“特殊的雪花”,因此我为每个列构建了一个专用的争吵函数,以及一个调用每个雪花争吵子函数的高阶函数。

我的问题是对使用targets::tar_target().


可重现的例子

为了准确传达我的问题,不幸的是,我需要在此示例中投入大量代码。第一部分仅用于生成演示数据并模仿 Oracle DB。您可以只运行代码并跳到它后面的部分。

1.模拟数据:建立一个有4张表的数据库
只需运行这段代码;对于理解问题并不重要

reprex 包于 2021-10-23 创建(v2.0.1)


2.我的问题从这里开始;我有一个数据库,里面装满了我想分析的数据。
从上面运行模拟代码后,我们现在有了con代表远程数据库的对象。我们可以探索里面有哪些表con

授予数据库访问权限的人还告诉我们,它存储了大约 1000 人的数据,分散在 4 个不同的表中。

表名 存储在那里的数据类型
AQNF_223_daqVV 心理测量
DJLNGJN3445_NFKS 与就业有关的测量
DKFMDGNSQWRE_320586 验血
KLDJNSDOIJFW_295868FJDI 物理测量,例如身高、体重等。

3. 以一个新变量为例进行演练
假设我想计算一个新变量来表示与一个人相处是否有趣。从上表中我看到表名"AQNF_223_daqVV"包含心理测量,所以我理解它是一个相关的表。探索该数据后,我决定我的新变量"fun_to_be_with"将是现有变量accessibleactive和的平均值adaptable

当我开始探索我可以计算的更有趣的变量时,我开始意识到除了初始计算(例如,取平均值)之外,还有几个适用于某些变量但不适用于其他变量的争论步骤。例如,有时我想向上或向下舍入变量的值,或者取对数,或者其他。所以我计算的每个新变量都是一个“特殊的雪花”,我有一个包装函数来协调所有这些偏好。

3a) 迭代的需要
对于只处理一个新变量,wrangle_snowflake ()可以按原样使用:

但问题在于规模。我的项目需要处理大约 100 个新变量。而且我不想以wrangle_snowflake()这种方式重复 100 次。如果我们只是在本地将 DB 表保存为环境中的对象,我们可以purrr::pmap()很好地利用它进行迭代:

pmap()非常强大,因为我可以扩展tbl_parameters和添加更多的雪花,但调用tbl_parameters %>% purrr::pmap(.f = wrangle_snowflake)将保持不变。

3b){targets}
这个例子中没有反映一个主要问题:我需要从远程数据库中获取的数据是巨大的。每个表(例如,AQNF_223_daqVV)的范围可以是 1-10 百万行。在这种情况下,我不想将整个数据作为 R 对象加载到环境中。相反,该{targets}包允许我为每个巨型表创建一个“目标”,该表作为.rds文件存储在目录中。这样我就可以间接使用巨型表,而无需加载它。

最后:我的问题

{targets}不适用于我的pmap()方法。由于我不想将整个巨大的数据表带到 R 的环境中,我宁愿简单地用它们的名字来引用它们。这样,我tbl_parameters_2看起来像:

但!{targets} 不允许通过字符串引用现有目标

因此,如果我使用targets为每个数据库表创建一个目标:

然后想要pmap()迭代tbl_parameters_2并为每个字符串db_name替换它与相应的目标,那么它不会工作。

好吧,它只是行不通。根据@landau,这是因为:

targets使用静态代码分析检测依赖关系


对于那些到目前为止阅读的人,也许您知道如何结合迭代和引用预先存在的目标?

0 投票
1 回答
39 浏览

r - R以编程方式读取目标

我有一组目标,比如说data_a, data_b, ... 我想遍历所有数据集并加载数据。这可以使用tar_read(data_a)或来实现tar_read(data_a")。因为我想以编程方式加载目标,所以我想在某种 lapply 中使用这样的东西:

但是后来我得到了target_name找不到目标的错误。我知道这与 NSE 和 R 作为tar_read内部调用有关substitute,但我无法弄清楚如何掩盖它target_nametar_read工作。我已经尝试过Advanced R以及 rlangeval(parse())中提供的不同选项(例如 !!、{{ 和类似的)都无济于事。

知道如何实现这一目标吗?

0 投票
0 回答
34 浏览

r - rmarkdown 渲染 NSE 函数仅在调用者内部失败

我似乎有 NSE、rmarkdown 和 callr 的奇怪组合,类似于Is it possible to disable `callr` for RMarkdown? .

当我为变量设置一个值以在类似于使用 NSE 通过嵌套 eval 和列表调用实现的过滤器调用中使用它时,它会严重失败,但仅在 callr 中失败。

通过调用者运行它:

可以看到它的抱怨sig_cutoff是没有找到,但它存在于环境中,但似乎没有得到传递。

如果我直接运行它,它可以工作:

我已将所有代码放在github repo中。

有趣的是,这绝对是调用者的问题,因为目标也有同样的问题。

调用者 v 1.0.7,rmarkdown v 2.11,R 4.1.0

其他包版本在renv.lock文件中。

0 投票
1 回答
31 浏览

r - 在目标工作流中处理 zip 文件

我正在尝试建立一个工作流程,其中涉及下载 zip 文件、提取其内​​容并将函数应用于其每个文件。

我遇到了一些问题:

  1. 如何可重现地设置空文件系统?也就是说,我希望能够创建一个空目录系统,稍后将文件下载到该目录中。理想情况下,我想做类似的事情tar_target(my_dir, fs::dir_create("data"), format = "file"),但我从文档中知道空目录不能与 format = "file" 一起使用。我知道我可以dir_create在每个需要它的情况下做一个,但这似乎很笨拙。

  2. 在下面的代表中,我想使用pattern = map(x). 正如错误所暗示的那样,我需要为父目标指定一个模式,因为format = "file". 您可以看到,如果我确实为父目标指定了模式,我将再次需要为其父目标执行此操作。据我所知,无法为没有父母的目标设定模式(但我之前已经错了很多次)。

我有一种感觉,这一切都错了——谢谢你的时间。

reprex 包于 2021-12-08 创建(v2.0.1)