使用map()沿着两个不同长度的向量迭代

问题描述 投票:0回答:1

我有两个长度不等的向量。一个向量是数据帧列表,另一个向量由唯一值组成。如何使用

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 function iteration lapply purrr
1个回答
0
投票

在 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
© www.soinside.com 2019 - 2024. All rights reserved.