我有两个长度不等的向量。一个向量是数据帧列表,另一个向量由唯一值组成。如何使用
map()
在自定义函数上迭代向量?虚拟数据如下:
x2 <- letters
y2 <- list(df1, df2, df3, .....)
# where:
df1 <- data.frame(
alphabet = c(letters[1:2]),
latitude = c(7.302888, 7.302717),
longitude = c(5.143116, 5.143184)
)
df2 <- data.frame(
alphabet = c(letters[3:4]),
latitude = c(4.948605, 4.948610),
longitude = c(8.352012, 8.352157)
)
df3 <- data.frame(
alphabet = c(letters[5:6]),
latitude = c(7.681907, 7.681867),
longitude = c(6.414152, 6.414239 )
)
dist_func <- function(i, j) {
mat = j[j$alphabet==i, c("latitude","longitude")]
mat
}
map(x2, ~ map(y2, function(j) dist_func(.i, j)))
抛出错误:
预期输出应该是数据帧列表,其中每个数据帧如下:
alphabet latitude longitude
1 a 7.302888 5.143116
任何帮助将不胜感激。
在 R 中执行此操作的惯用方法是绑定到数据框并拆分:
df_long <- do.call(rbind, y2)
split(df_long, df_long$alphabet)
# $a
# alphabet latitude longitude
# 1 a 7.302888 5.143116
# $b
# alphabet latitude longitude
# 2 b 7.302717 5.143184
# $c
# alphabet latitude longitude
# 3 c 4.948605 8.352012
# $d
# alphabet latitude longitude
# 4 d 4.94861 8.352157
# $e
# alphabet latitude longitude
# 5 e 7.681907 6.414152
# $f
# alphabet latitude longitude
# 6 f 7.681867 6.414239