无法在r中使用pmap功能中的列表

无法在r中使用pmap功能中的列表,r,tidyverse,purrr,R,Tidyverse,Purrr,我有2个向量(respose和pca)和1个列表(test),我想将它们与expand.grid一起使用: final = rbind( expand.grid(response = response,pre1=test[[1]],pre2=pca[1],stringsAsFactors = FALSE), expand.grid(response = response,pre1=test[[2]],pre2=pca[2],stringsAsFactors = FALSE), exp

我有2个向量(
respose
pca
)和1个列表(
test
),我想将它们与
expand.grid
一起使用:

final = rbind(
  expand.grid(response = response,pre1=test[[1]],pre2=pca[1],stringsAsFactors = FALSE),
  expand.grid(response = response,pre1=test[[2]],pre2=pca[2],stringsAsFactors = FALSE),
  expand.grid(response = response,pre1=test[[3]],pre2=pca[3],stringsAsFactors = FALSE),
  expand.grid(response = response,pre1=test[[4]],pre2=pca[4],stringsAsFactors = FALSE),
  expand.grid(response = response,pre1=test[[5]],pre2=pca[5],stringsAsFactors = FALSE),
  expand.grid(response = response,pre1=test[[6]],pre2=pca[6],stringsAsFactors = FALSE),
  expand.grid(response = response,pre1=test[[7]],pre2=pca[7],stringsAsFactors = FALSE)
)

可重复代码太多,我使用
map\u dfr
重写代码:

final2 <- map_dfr(1:7, 
                  ~ expand.grid(response = response,pre1=test[[.]],pre2=pca[.],stringsAsFactors = FALSE))

错误:
.l
的元素1的长度必须为1或7,而不是5

我想知道代码是否只能通过
map\u-dfr
而不是
pamp\u-dfr
重写

任何帮助都将不胜感激

这是我的2个向量和1个列表:

test <- list(c("PM2_5_s_lag_1", "PM2_5_m_lag_1", "PM2_5_s_lag_2", "PM2_5_m_lag_2", 
               "PM2_5_s_lag_3", "PM2_5_m_lag_3"), c("pca_PMC", "PMC_s_lag_1", 
                                                    "PMC_m_lag_1", "PMC_s_lag_2", "PMC_m_lag_2", "PMC_s_lag_3", "PMC_m_lag_3"
               ), c("pca_PM10", "PM10_s_lag_1", "PM10_m_lag_1", "PM10_s_lag_2", 
                    "PM10_m_lag_2", "PM10_s_lag_3", "PM10_m_lag_3"), c("NO2_s_lag_1", 
                                                                       "NO2_m_lag_1", "NO2_s_lag_2", "NO2_m_lag_2", "NO2_s_lag_3", "NO2_m_lag_3"
                    ), c("SO2_s_lag_1", "SO2_m_lag_1", "SO2_s_lag_2", "SO2_m_lag_2", 
                         "SO2_s_lag_3", "SO2_m_lag_3"), c("CO_s_lag_1", "CO_m_lag_1", 
                                                          "CO_s_lag_2", "CO_m_lag_2", "CO_s_lag_3", "CO_m_lag_3"), c("O3_s_lag_1", 
                                                                                                                     "O3_m_lag_1", "O3_s_lag_2", "O3_m_lag_2", "O3_s_lag_3", "O3_m_lag_3"
                                                          ))


pca <- c("pca_pm2_5", "pca_PMC", "pca_PM10", "pca_NO2", "pca_SO2", "pca_CO", 
         "pca_O3")

response <- c("X0.whole", "X0.man", "X0.woman", "X0.agelo65", "X0.ageupwith65"
)

test您希望将完整的向量
response
传递给
pmap\u-dfr
中的每个调用。为此,您需要制作一个包含7份
响应
向量副本的列表。你可以用它来做这个

rep(list(response), 7)
agrg.list
的完整结构如下所示

agrg.list = list(response = rep(list(response), 7), pre1 = test, pre2 = pca)

其余的将按预期工作。

您希望将完整的向量
响应
传递给
pmap\u dfr
中的每个调用。为此,您需要制作一个包含7份
响应
向量副本的列表。你可以用它来做这个

rep(list(response), 7)
agrg.list
的完整结构如下所示

agrg.list = list(response = rep(list(response), 7), pre1 = test, pre2 = pca)

其余的将按预期工作。

response
变量是常量,不会更改,因此您不应将其传递到任何
映射
函数中。由于只有两个变量发生变化,因此使用
map2\u df

purrr::map2_df(test, pca, ~expand.grid(response, pre1 = .x, pre2 = .y))
或者也可以使用
pmap_df
编写为:

purrr::pmap_df(list(test, pca), ~expand.grid(response, pre1 = ..1, pre2 = ..2))

response
变量是常量,不会更改,因此不应将其传递到任何
map
函数中。由于只有两个变量发生变化,因此使用
map2\u df

purrr::map2_df(test, pca, ~expand.grid(response, pre1 = .x, pre2 = .y))
或者也可以使用
pmap_df
编写为:

purrr::pmap_df(list(test, pca), ~expand.grid(response, pre1 = ..1, pre2 = ..2))

pca
response
应具有相同的长度,响应[7]不存在
pca
response
应具有相同的长度,响应[7]不存在