R:如何简化重新运行的输出(从purrr)?
(这是我关于Stackflow的第一个问题:我希望我提出的是正确的) 我正在使用rerun(来自tidyverse purrr)重复一些计算。这是一个非常简单的例子(它可能看起来很荒谬,但它说明了这一点)R:如何简化重新运行的输出(从purrr)?,r,purrr,R,Purrr,(这是我关于Stackflow的第一个问题:我希望我提出的是正确的) 我正在使用rerun(来自tidyverse purrr)重复一些计算。这是一个非常简单的例子(它可能看起来很荒谬,但它说明了这一点) 库(tidyverse) #函数进行计算 是否重新运行% 转换(结果=do_计算(x1,x2))%>% 解组() 返回(数据输出) } #一些测试数据 (测试数据% 安排(id,日期)) #一个tibble:9x4 身份证日x1x2 1 1 1 0.195 0.0854 2
库(tidyverse)
#函数进行计算
是否重新运行%
转换(结果=do_计算(x1,x2))%>%
解组()
返回(数据输出)
}
#一些测试数据
(测试数据%
安排(id,日期))
#一个tibble:9x4
身份证日x1x2
1 1 1 0.195 0.0854
2 1 2 0.884 0.0863
3 1 3 0.539 0.240
4 2 1 0.696 0.262
5 2 2 0.752 0.663
6 2 3 0.477 0.252
7 3 1 0.0387 0.494
8 3 2 0.286 0.589
9 3 3 0.0249 0.870
#进行计算。n=3次
#reun的输出是一个列表,
#在本例中,这是一个包含3个未命名文件的列表
#每个都有一个id和结果列
(test这里有一个快速的解决方案:创建一个大的数据帧并删除重复的id
列:
test %>%
purrr::map_dfc(cbind) %>%
dplyr::select(-matches("id.+"))
(编辑:在下面添加备选方案以保持在dplyr内;即,这将导致出现TIBLE
)
我假设您知道,在您的示例中,所有三个结果都是相同的
在实际问题中,结果是不同的。我也假设
您希望重新运行分析3次以上。(如果我弄错了,请让我知道)bind\u cols(test)
就是您所需要的谢谢:太简单了!这会产生形式id、result、id1、result1、id2、result2的输出。有没有办法同时只包含id(即不包括id1、id2)?在这种情况下bind\u cols(test)%%>%select(-matches(“id.+”)
谢谢,效果很好!谢谢,这很有效!是的,我知道在这个简单的示例中,结果是相同的(实际计算更复杂,每次重新运行的结果不同)。在实际示例中,重新运行的时间将比3大很多。最终目标是(例如)按行查找所有结果列中的最小值和最大值。
id_tibble <- as_tibble(test[[1]][["id"]])
result_tibble <- as_tibble(test[[1]][["result"]])
new_tibble <- as_tibble(test[[1:3]][["result"]])
id result1 result2 result3
<chr> <dbl> <dbl> <dbl>
1 0.0167 0.0167 0.0167
1 0.0763 0.0763 0.0763
1 0.129 0.129 0.129
2 0.182 etc.
test %>%
purrr::map_dfc(cbind) %>%
dplyr::select(-matches("id.+"))
test %>%
dplyr::bind_cols() %>%
dplyr::select(-matches("id.+"))