[英]can not use list in pmap function in r
我有 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_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.