问题标签 [do.call]

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 投票
2 回答
269 浏览

r - 你可以通过 do.call 使用 fix 吗?

fix我有一些代码,通过do.call而不是直接调用更方便。任何旧数据框都适用于此示例:

显而易见的第一次尝试是

不幸的是,这失败了

所以,我们给它起一个名字:

这次它失败了

作为记录,edit也不起作用。

请问有人能想到一个合理的解决方法吗?

编辑:经过反思,我忘记了fix总是将其答案转储到全局环境中,这对于测试示例来说很好,但对于函数的使用不太好。Joshua 出色的解决方法并没有扩展到与edit.

对于奖励积分,您如何拨打edit电话do.call

0 投票
5 回答
1108 浏览

function - R:将字符串指定为调用另一个函数的函数的参数

这是一个关于 R 中编码的问题。

我提供的例子是说教的。假设我有名为“func1”和“func2”的函数,每个函数都有两个参数(比如说标量)。我想指定另一个具有三个参数的函数“applyfunction”:要使用的函数的最后一个数字(“1”或“2”),以及该函数的两个参数。例如,我想做这样的事情(这当然行不通):

applyfunction(1,2,3)它将有效运行的地方func1(2,3)

applyfunction(2,9,43)它将有效运行的地方func2(9,43)

有任何想法吗?

最好的,数据库

0 投票
4 回答
33598 浏览

r - 在任意长的对象列表上使用 cbind

我想找到一种通过将cbind()许多单独的对象连接在一起来创建 data.frame 的方法。例如,如果 A、B、C 和 D 都是长度相等的向量,则可以创建data.frameABCD

但是,当要组合的对象数量变大时,输入所有对象的名称会变得很乏味。此外,有没有办法调用cbind()对象名称的向量,例如

或在包含所有要组合的对象的列表上,例如

目前,我能想到的唯一解决方法是使用paste(), cat(), write.table(), 并source()构造 的参数cbind(),将其编写为脚本并获取它。这似乎是一个非常讨厌的组合。此外,我已经研究过do.call()但似乎无法找到一种方法来完成我想要的。

0 投票
1 回答
1522 浏览

list - r 使用 do.call(rbind) 或 ddply 组合来自 tapply 的结果

我有日期/时间信息,我想在其中获取按年份分组的“季节”中日期的平均值、最小值、最大值和范围,而我稍微成功的唯一方法是使用 tapply。最接近的是 tapply 中的汇总函数。结果是我只假设是按年份列出的最小值、最大值、第一个 Qu、中值等。这些不完全是我需要的,但工作正常。

我从 1 个赛季的 tapply 函数获得的结果示例:

我想要做的是将我为不同季节生成的这些列表组合成一个大的快乐数据框,我可以将其导出到 csv 中。我已经搜索和搜索,并且变得更加困惑。大多数人建议最简单的是

但是,这给了我一条错误消息或一个空的“测试”框架。

我已经阅读了 plyr 包并假设 ddply 而不是 tapply 将结果强制转换为数据框应该可以工作,但我无法弄清楚如何让它工作,因为我无法让它完成我的功能将需要诸如平均值、最小值、最大值和范围...

我想要的最终结果是这样的:

那么我想做同样的事情,只在个人内部确定。我有一个 ID 字段,其中在某些年份测量了同一个人。我想在每个季节的年份中获得该人的平均开始日期。排除那些多年来没有被衡量的人。

由于我不了解如何操作列表和数组,甚至不了解 tapply 正在做什么,我不知道如何解决所有这些问题。我是否创建一个空数据框并将所有这些东西放入某个循环或其他东西中?以下是几年内 4 个“季节”的一些示例数据,请注意有些日期有日期和时间戳,有些只有日期。

这是我迄今为止编写的一些代码:

0 投票
3 回答
9076 浏览

list - 如何在R中的列表中组合具有不同长度的向量?

组合列表中包含的以下向量时遇到问题:

它给出了以下列表:

使用 do.call 函数组合它们: y<- do.call(cbind,x)

给出:

虽然我想获得这个:

0 投票
4 回答
4171 浏览

performance - 使用 do.call 和 ldply 将一长串 data.frames(约 100 万)转换为单个 data.frame 时遇到问题

我知道这里有很多关于使用 do.call 或 ldply 将 data.frames 列表转换为单个 data.frame 的方法的问题,但这个问题是关于理解这两种方法的内部工作原理并试图找出原因我无法将几乎 100 万个具有相同结构、相同字段名称等的 df 列表连接到单个 data.frame 中。每个 data.frame 为 1 行 21 列。

数据开始是一个 JSON 文件,我使用 fromJSON 将其转换为列表,然后运行另一个 lapply 以提取列表的一部分并转换为 data.frame,最终得到一个 data.frames 列表。

我试过了:

但我不得不在让它运行长达 3 小时并且没有得到任何回报后终止该过程。

有没有更有效的方法来做到这一点?如何解决正在发生的事情以及为什么需要这么长时间?

仅供参考 - 我在带有 RHEL 的 72GB 四核服务器上使用 RStudio 服务器,所以我认为内存不是问题。会话信息如下:

0 投票
1 回答
688 浏览

r - 恒定大小的周期。在 R 中应用不规则间隔的端点

我有一个不规则的时间序列包含在 xts 和单独的时间索引向量(端点)中。我想根据每个端点的前 5 秒计算每个索引点的统计信息。因此,起点应在每个终点前 5 秒。这些时期可能会重叠。

我找不到 *apply family 的任何功能来做这项工作。我怎样才能做到这一点?我应该为它手动编写循环吗?

这是我的简陋插图,黑色是 xts 数据,红色是端点。我希望以 5 秒的间隔在所有黑点上计算每个红点的函数结果。

重叠区间

0 投票
3 回答
3118 浏览

r - lapply 和 do.call 运行很慢?

我有一个大约 35,000 行,7 列的数据框。它看起来像这样:

头(nuc)

gene_id 是一个因子,它有大约 3,500 个独特的级别。我想,对于每个级别的gene_id 得到min(start), max(end), mean(pctAT), mean(pctGC), 和sum(length).

我尝试使用 lapply 和 do.call ,但它需要永远 +30 分钟才能运行。我正在使用的代码是:

我确定我做错了什么来减慢速度。我还没有等待它完成,因为我确信它可以更快。有任何想法吗?

0 投票
2 回答
351 浏览

r - R中的环境链接

在我的 R 开发中,我需要将函数原语包装在proto对象中,以便在$perform()调用对象的方法时可以将许多参数自动传递给函数。函数调用在内部通过do.call(). 一切都很好,除非函数试图从定义它的闭包中访问变量。在这种情况下,该函数无法解析名称。

这是我发现的重现该行为的最小示例:

我有一个可重复的testthat测试,它也输出大量的诊断输出。诊断输出让我难过。通过查找父环境链,我的位于函数内部的诊断代码找到并打印了函数无法找到的同一个变量。请参阅此要点。.

如何do.call正确设置环境?

0 投票
2 回答
1100 浏览

r - 提取data.table的段

我有一个data.table,我需要从不同的行位置开始提取等长的段。最简单的方法是什么?例如:

这当然不是data.table做事的方式,所以我希望有更好的方法?

编辑:根据下面的评论,我对此进行了编辑,以便清楚地看出其中的值a不一定是连续的,也不对应于行号。