R:如何简化重新运行的输出(从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

(这是我关于Stackflow的第一个问题:我希望我提出的是正确的)

我正在使用rerun(来自tidyverse purrr)重复一些计算。这是一个非常简单的例子(它可能看起来很荒谬,但它说明了这一点)

库(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.+"))