问题标签 [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.
r - 使用 R 目标将新数据附加到现有数据
我正在使用targets
工作流管道。此管道的一部分是监视 csv 文件目录的更新。这个目录有10000多个csv文件,每周都会增加新文件。我希望能够识别新添加的文件并将它们附加到现有的一组*.rds
文件中。最简单的方法是重新运行*.rds
每周创建 5 个文件子集的过程,但这需要时间。有效的方法是识别新添加的文件,并且只需bind_rows
使用正确的rds
文件。
dir()
我可以通过使用and的典型编程很容易地做到这一点setdiff()
,我在其中存储前一天的 csv 文件路径的快照。但我正在努力在targets
框架内实现这一目标。
这是一个似乎不起作用的尝试。我想我想监视/_targets
目录中的临时结果,但我不确定如何去做。而且,targets
文档建议不要tar_load
在目标配置本身内部使用。
r - 您如何使用“targets”包的交互式 R Markdown 功能
我正在尝试使用targets
R 中的包提供的交互式 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-data
raw_data
head(raw_data)
raw-data
所以交互模式似乎不像手册中描述的那样工作。只要所有目标块都设置为tar_interactive = FALSE
. 起初我想也许我必须在非交互模式下编织文档,然后,因为目标将在由设置的缓存中targets
,我可以在交互模式下访问对象,但这也不起作用(如果它确实有效,它似乎会破坏首先在交互模式下对管道进行原型设计的目的)。我错过了什么吗?
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 也取得了成功,所以我认为这不是我的实际互联网连接:
在使用这两个软件包时如何诊断连接问题有什么建议吗?
targets-r-package - 在目标包中使用 callr_function = NULL 的含义
我想知道当 callr_function = NULL 时会发生什么?是否只是环境/副作用中的问题?
主要是想知道,因为我传递了相当大的时空数组(0.5 到 5 gigs),并且通过 saveRDS 的调用者序列化非常慢。
我正在考虑的两件事是分叉 callr 并放入不同的保存函数或仅使用 callr_function = NULL。
r - 当我有多个数据文件时,我应该如何使用 {targets}
我有大约 50 个数据文件(主题),在将它们组合到 data.frame 中进行建模之前,我会单独处理它们。我不确定如何最好地使用 {targets} 。
我尝试使用动态分支,但我不确定如何使用这种方法跟踪主题 ID。在我目前的方法中,我将所有数据放在一个命名列表中,其中一级名称是主题 ID,但对于目标,名称是任意的。
我知道这并不是一个真正的具体问题,但我希望被指出一个适当的解决方案,而不是为一个错误的问题得到一个“正确”的答案。
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_r
!filtered_data_ozone
如果我们定义一个用于交换别名的实用函数:
当我们在内部使用它时它不会起作用tar_target()
,即使在将字符串转换为符号时也是如此。
错误:调用子进程失败:没有适用于“inner_join”的方法应用于“名称”类的对象
r - 如何使用基于现有目标的 `targets::tar_target()` 创建新目标时使用迭代
我{targets}
在数据分析项目中使用该包,我需要从远程 Oracle 数据库中获取数据集。
我的首要任务是双重的:
- 从分散在 Oracle DB 中的不同视图和表中获取数据。
- 根据我从 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"
将是现有变量accessible
、active
和的平均值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
使用静态代码分析检测依赖关系
对于那些到目前为止阅读的人,也许您知道如何结合迭代和引用预先存在的目标?
r - R以编程方式读取目标
我有一组目标,比如说data_a
, data_b
, ... 我想遍历所有数据集并加载数据。这可以使用tar_read(data_a)
或来实现tar_read(data_a")
。因为我想以编程方式加载目标,所以我想在某种 lapply 中使用这样的东西:
但是后来我得到了target_name
找不到目标的错误。我知道这与 NSE 和 R 作为tar_read
内部调用有关substitute
,但我无法弄清楚如何掩盖它target_name
来tar_read
工作。我已经尝试过Advanced R以及 rlangeval(parse())
中提供的不同选项(例如 !!、{{ 和类似的)都无济于事。
知道如何实现这一目标吗?
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文件中。
r - 在目标工作流中处理 zip 文件
我正在尝试建立一个工作流程,其中涉及下载 zip 文件、提取其内容并将函数应用于其每个文件。
我遇到了一些问题:
如何可重现地设置空文件系统?也就是说,我希望能够创建一个空目录系统,稍后将文件下载到该目录中。理想情况下,我想做类似的事情
tar_target(my_dir, fs::dir_create("data"), format = "file")
,但我从文档中知道空目录不能与 format = "file" 一起使用。我知道我可以dir_create
在每个需要它的情况下做一个,但这似乎很笨拙。在下面的代表中,我想使用
pattern = map(x)
. 正如错误所暗示的那样,我需要为父目标指定一个模式,因为format = "file"
. 您可以看到,如果我确实为父目标指定了模式,我将再次需要为其父目标执行此操作。据我所知,无法为没有父母的目标设定模式(但我之前已经错了很多次)。
我有一种感觉,这一切都错了——谢谢你的时间。
由reprex 包于 2021-12-08 创建(v2.0.1)