繁体   English   中英

不能在 r 的 pmap 函数中使用列表

[英]can not use list in pmap function in r

我有 2 个向量( resposepca )和 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_dfr重写代码:

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

然后我也想使用pmap_dfr来做到这一点,但得到一个错误:

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

final3 <- pmap_dfr(agrg.list, 
                   ~expand.grid(response = response, pre1 = unlist(pre1), pre2= pre2, stringsAsFactors = F))

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

我想知道代码是否只能通过map_dfr而不是pamp_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"
)

要完整的矢量路径respons到内每个调用pmap_dfr 为此,您需要制作一个包含 7 个response向量副本的列表。 你可以这样做

rep(list(response), 7)

agrg.list的完整构造将如下所示。

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

其余的将按预期工作。

response变量是常量并且不会改变,所以你不应该在任何map函数中传递它。 因为只有 2 个变量会改变使用map2_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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM