Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将“pmap”输出分配给具有模式名称的数据帧_R_Tidyverse_Purrr - Fatal编程技术网

R 将“pmap”输出分配给具有模式名称的数据帧

R 将“pmap”输出分配给具有模式名称的数据帧,r,tidyverse,purrr,R,Tidyverse,Purrr,我正在使用pmap跨多个数据帧运行相同的函数,并希望将输出列表的每个元素分配给一个具有模式名称的单独对象。但我不知道怎么做 例如,这里有一个最小的例子,我计算三个不同变量的分位数- #函数调用 purrr::pmap(.l=列表( x=列表(iris$Sepal.Length,mtcars$wt,anscombe$y4), probs=列表(序号(0,1,0.10)), na.rm=list(真) ), .f=统计信息::分位数) #输出 #> [[1]] #> 0% 10% 20%

我正在使用
pmap
跨多个数据帧运行相同的函数,并希望将输出列表的每个元素分配给一个具有模式名称的单独对象。但我不知道怎么做

例如,这里有一个最小的例子,我计算三个不同变量的分位数-

#函数调用
purrr::pmap(.l=列表(
x=列表(iris$Sepal.Length,mtcars$wt,anscombe$y4),
probs=列表(序号(0,1,0.10)),
na.rm=list(真)
),
.f=统计信息::分位数)
#输出
#> [[1]]
#>   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
#> 4.30 4.80 5.00 5.27 5.60 5.80 6.10 6.30 6.52 6.90 7.90 
#> 
#> [[2]]
#>     0%    10%    20%    30%    40%    50%    60%    70%    80%    90% 
#> 1.5130 1.9555 2.3490 2.7730 3.1580 3.3250 3.4400 3.5550 3.7700 4.0475 
#>   100% 
#> 5.4240 
#> 
#> [[3]]
#>    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
#>  5.25  5.56  5.76  6.58  6.89  7.04  7.71  7.91  8.47  8.84 12.50

这将生成一个包含3个元素的
列表
(每个元素都是一个数据帧)。我不想得到这个
列表
,而是想自动将每个元素分配给一个具有模式名的对象(例如,
[[1]]
作为
dfu 1
[[2]]
作为
dfu 2
[[3]
作为
dfu 3
,等等)。(我知道
assign
功能,但我不知道如何将它与
purr
结合起来)

您可以使用
map2
来完成:

library(purrr)
res <- pmap(.l = list(
    x = list(iris$Sepal.Length, mtcars$wt, anscombe$y4),
    probs = list(seq(0, 1, 0.10)),
    na.rm = list(TRUE)
), .f = stats::quantile)

map2(.x = paste0('df_', seq_along(res)), .y = res,
     .f = ~ assign(.x, .y, envir = .GlobalEnv))

# > df_1
#   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
# 4.30 4.80 5.00 5.27 5.60 5.80 6.10 6.30 6.52 6.90 7.90 
# > df_2
#     0%    10%    20%    30%    40%    50%    60%    70%    80%    90%   100% 
# 1.5130 1.9555 2.3490 2.7730 3.1580 3.3250 3.4400 3.5550 3.7700 4.0475 5.4240 
# > df_3
#   0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
# 5.25  5.56  5.76  6.58  6.89  7.04  7.71  7.91  8.47  8.84 12.50
库(purrr)
res df_1
#   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
# 4.30 4.80 5.00 5.27 5.60 5.80 6.10 6.30 6.52 6.90 7.90 
#>df_2
#     0%    10%    20%    30%    40%    50%    60%    70%    80%    90%   100% 
# 1.5130 1.9555 2.3490 2.7730 3.1580 3.3250 3.4400 3.5550 3.7700 4.0475 5.4240 
#>df_3
#   0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
# 5.25  5.56  5.76  6.58  6.89  7.04  7.71  7.91  8.47  8.84 12.50

尽管我认为最好将结果保存在一个列表中。

您可以使用
map2

library(purrr)
res <- pmap(.l = list(
    x = list(iris$Sepal.Length, mtcars$wt, anscombe$y4),
    probs = list(seq(0, 1, 0.10)),
    na.rm = list(TRUE)
), .f = stats::quantile)

map2(.x = paste0('df_', seq_along(res)), .y = res,
     .f = ~ assign(.x, .y, envir = .GlobalEnv))

# > df_1
#   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
# 4.30 4.80 5.00 5.27 5.60 5.80 6.10 6.30 6.52 6.90 7.90 
# > df_2
#     0%    10%    20%    30%    40%    50%    60%    70%    80%    90%   100% 
# 1.5130 1.9555 2.3490 2.7730 3.1580 3.3250 3.4400 3.5550 3.7700 4.0475 5.4240 
# > df_3
#   0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
# 5.25  5.56  5.76  6.58  6.89  7.04  7.71  7.91  8.47  8.84 12.50
库(purrr)
res df_1
#   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
# 4.30 4.80 5.00 5.27 5.60 5.80 6.10 6.30 6.52 6.90 7.90 
#>df_2
#     0%    10%    20%    30%    40%    50%    60%    70%    80%    90%   100% 
# 1.5130 1.9555 2.3490 2.7730 3.1580 3.3250 3.4400 3.5550 3.7700 4.0475 5.4240 
#>df_3
#   0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
# 5.25  5.56  5.76  6.58  6.89  7.04  7.71  7.91  8.47  8.84 12.50
虽然我认为最好把结果列在一个清单里