问题标签 [purrr]
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 - 如何在 tidyr 中结合 unnest 的结果?
数据
客观的
应用segmented
函数进行分段线性回归。我在首先tidyr::nest
ing 数据集然后使用 package.json之后这样做了purrr
。最后,我 unnested
得到了想要的输出。以下是代码:
期望的输出:
基本上,psi
是x
之后的slope
变化。所以,我想要以下输出:
如何以上述方式组合这 3 个数据集up
(us
和)?ud
请注意,这df
是玩具数据集。原来df
有数百个o
s ie A, B, ...这就是我合并x
并y
进入df
.
r - 命名两个不均匀列表的所有组合
如何创建两个不均匀列表的所有组合并将名称映射到结果上?我已经使用 purrr 包的cross2
函数来生成组合,但是我无法通过组合原始列表中的名称来找到一种优雅的方式来命名结果列表。
我想保持相同的列表结构,但将名称映射到列表的两个级别,如下所示:
r - 使用 Purrr 和 Dplyr 在多个数据帧中重新编码相似的因子水平
下面是两个简单的数据框。我想重新编码(折叠)Sat1
和Sat2
列,以便所有满意程度都简单编码为Satisfied
,所有不满意程度都编码为Dissatisfied
。中性将保持中性。因此,这些因素将具有三个级别 - Satisfied, Dissatisfied, and Neutral
。
我通常会通过绑定数据帧并与包lapply
中的重新代码一起使用来完成此操作car
,例如:
我想使用地图功能来完成此任务,特别是at_map
(维护数据框,但我是新手,purrr
因此可以随意建议其他版本的地图)来自purrr
tidyr stringr ggplot2` dplyr
,因此一切都可以轻松流水线化.,
and
下面的示例是我想要完成的,但要重新编码,但我无法使其工作。
http://www.r-bloggers.com/using-purrr-with-dplyr/
我想使用 at_map 或类似的 map 函数,这样我就可以保留 and 的原始列Sat1
,Sat2
因此重新编码的列将被添加到数据框中并重命名。如果这个步骤也可以包含在一个函数中,那就太好了。
实际上,我会有很多数据帧,所以我只想重新编码一次因子水平,然后使用函数 frompurrr
使用最少的代码对所有数据帧进行更改。
r - `dmap_if` 和 'model.matrix' 一起
我正在使用包中的Arthritis
数据集vcd
来执行一种热编码。我想用purrr::dmap_if
和Matrix::model.matrix
一起来做这件事。当我跑
工作正常。
当我使用下面的代码不起作用
r - 为什么 R 在收敛失败时会自动进入浏览器模式?
我正在 R 中进行基于仿真的功率分析。我通过 RStudio (0.98.932) 运行 R,使用函数plyr::rdply
并lme4::glmer
分别生成数据和拟合模型(请参阅下面的可重现示例的结尾以了解 R 环境和包版本)。
该过程是随机生成给定参数化的数据集并对其进行模型拟合。然而,该模型时不时地无法收敛。当发生以下警告时
[1]“无法评估缩放梯度”
[2]“模型无法收敛:具有 1 个负特征值的退化 Hessian”
R 进入浏览器模式,我必须手动干预(例如按c
)才能返回模拟循环。这是一个真正的痛苦,因为我需要在几天内运行数千次迭代,但每次遇到这个特定的收敛错误时,它都会停止,直到我按下一个键。
有没有办法避免 R 进入浏览器模式?我存储了每次模拟中出现的所有警告,所以我唯一的问题是当这种特定的收敛失败发生时我必须手动干预。我尝试使用purrr::quietly
andpurrr::safely
函数,但没有成功(参见下面代码中的示例)。
这是一个可以在我的计算机上运行的 MWE(我set.seed
用于重现性,所以我希望它能够独立于包版本等产生相同的结果)。在示例中,我应用了相同的逻辑,但不同且更简单的参数化,正如我在实际模拟中使用的那样:
更新(基于 r2evans 的评论)
在我的两台电脑上options("error")
产生
(函数 () { .rs.breakOnError(TRUE) })()
这似乎是某种 RStudio 默认值,并且确实似乎使 R 在遇到stop()
呼叫时进入浏览器模式(我看到这可以通过菜单工具栏 Debug > On Error > ... 在图形界面中更改)。无论如何,当我设置时options(error = NULL)
,问题就消失了。这是新的(简化的)示例,它工作得很好(在这个最小的示例中以及在应用于实际模拟时):
r - 使用函数创建多个交叉表和频率表时出现“所有参数必须具有相同长度”错误
我的问题有两个部分:
首先,我尝试使用“应用”和一个函数来为一个数据框创建多个频率表和交叉表。我想出了如何使它适用于下面包含的小数据框,但是当我尝试将它应用于我的真实数据(str也包含在下面)时,我收到一个错误,“所有参数必须具有相同的长度” .
其次,我很想知道是否有任何其他方法可以使用 purrr 函数或更高效的代码创建多个频率表和交叉表。我对 R 还比较陌生,所以我想总会有更好的方法。作为奖励,使用 ggplot2 将卡方检验以及条形图与每个表一起包括在内会很棒。我无法弄清楚如何将其添加到匿名函数(如下所列)中。也许我太雄心勃勃了,但是学习如何用最少的代码一次性实现所有这些会很棒。
所以下面是基本的示例数据框。我使用 apply 和一个匿名函数以及 table() 来生成除年龄以外的每一列的频率表,然后创建“受影响”与“宠物”、“城市”和“性别”的交叉表。
但是,当我尝试将此代码应用于更大的数据框(结构如下)时,我收到错误消息:
表中的错误(受影响,x):所有参数必须具有相同的长度
数据帧被称为 Inc,下面是我尝试生成错误消息的代码。
我希望通过包含数据框的 str 足以解决问题。
r - R:使用 reduce 和设置后缀的长到宽转换
我们以虹膜数据为例,稍作修改:
(注意:使用“UPDATE #1”部分中的 4 行代替下面的两行)
我需要将数据从这种 quazi-long 格式转换为宽格式,以便每一行中的 id 都是相同的。换句话说:原始的iris数据可以看作是一张贴在一张下面的3张表格(每个物种一张)。我需要将这 3 张桌子粘贴到另一张桌子的一侧。
这很容易,我是这样做的:
上面的示例产生的名称如“Petal.Length.x”、...、“Petal.Length.y”、...、“Petal.Length”。我希望它们是:“Petal.Length.setosa”,...,“Petal.Length.versicolor”,...,“Petal.Length.virginica”。所以唯一剩下的就是将物种名称附加到原始变量名称中。
我尝试使用map
and setNames
before reduce
,但没有成功。
我不想使用 tidyr 的gather
and separate
,因为我的 1.5GB 数据集以纯长格式增长到 13GB(我有很多需要保留的类似 id 的列)。
我可能可以使用 和一些基本的正则表达式在下一行添加名称names
,gsub
但我很好奇是否可以在不破坏%>%
流程的情况下做到这一点。
更新#1
谢谢你的回复,lmo!一个非常好的和干净的解决方案!当我第一次看到它时,我觉得我想多了这个问题......但实际上我在stackoverflow上过度简化了它。让我们添加一些混乱:
所以我有上面的数据,现在我尝试使用reduce
......我也从left_join
to更新,full_join
因为我意识到我正在跳过一些结果。
预先感谢您和问候。
r - 基于谓词函数(dplyr::mutate_if)改变数据帧的列
我想使用 dplyr 的mutate_if()
函数将 list-columns 转换为 data-frame-columns,但是当我尝试这样做时遇到了一个令人费解的错误。我正在使用 dplyr 0.5.0、purrr 0.2.2、R 3.3.0。
基本设置如下所示:我有一个数据框d
,其中一些列是列表:
我想d$A
使用以下函数将列表列(在本例中为 )转换为数据框列:
也就是说,我希望将 list-columnd$A
替换为 list lapply(d$A, tblfy)
,即
当然,在这种简单的情况下,我可以做一个简单的重新分配。然而,关键是我想以编程方式执行此操作,理想情况下使用 dplyr,以一种可以处理任意数量的列表列的普遍适用的方式。
这是我绊倒的地方:当我尝试使用以下应用程序将列表列转换为数据框列时
我收到一条我不知道如何解释的错误消息:
为什么会mutate_if()
失败?如何正确应用它以获得所需的结果?
评论
一位评论者指出,该函数tblfy()
应该是矢量化的。这是一个合理的建议。但是——除非我向量化不正确——这似乎不是问题的根源。插入 的矢量化版本tblfy()
,
intomutate_if()
失败并出现错误
更新
在获得了一些 purrr 的经验之后,我现在发现以下方法很自然,虽然有些冗长:
这或多或少与下面的@alistaire 解决方案相同,但map_if()
分别使用 、 。map()
, 代替mutate_if()
, 分别。Vectorize()
.