[英]How to pass second parameter to function while using the map function of purrr package in R
[英]purrr package in R: How to use a changing parameter for a function that is applied to nested data with map()
我的问题是,我不想在应用于嵌套数据的 random_points() 函数中使用固定参数 (n=100)(代码的最后一行):
trk_id <- trk2 %>% mutate(random_used = map(hr1, random_points(.,n=100)))
相反,对于每个 id,随机点的数量应该等于 id(数据帧 id_n)的观察总数。 我如何使用 map() 并为重复的函数包含一个不断变化的参数?
这是我使用 amt 包中包含的数据集 amt_fisher 的代码:
library(purrr)
library(amt)
library(tidyverse)
trk <- amt_fisher %>% make_track(x_, y_, t_, id = id)
#nest data
data <- trk %>% nest(dat = -"id")
#calculate home range for every id (hr) and convert it to an sp object (hr1)
trk1 <- data %>% mutate(hr = map(dat, ~hr_kde(.,levels=0.95)))
trk1 <- trk1 %>% mutate(hr1 = map(hr, hr_isopleths))
#create a data frame with the number of observations for every id
animalsid <- unique(amt_fisher$id)
output <- list()
for (i in 1:length(unique(amt_fisher$id))){
id1<- amt_fisher %>% filter(amt_fisher$id == animalsid[i])
n <- length(id1$t_)
output[[i]] <- list(n = n, id = animalsid[i])}
id_n <- do.call(rbind.data.frame, output)
#calculate n random points for every id within the calculated homerange of that id
trk_id <- trk1 %>% mutate(random_used = map(hr1, random_points(.,n=100)))
我想这就是你要找的——我们使用map2
为random_points
函数提供两个参数,第一个是 shapefile,第二个是我们想要生成的点数。 为了让一个数据框中的两个都循环,我首先使用快速left_join
:
trk_id <- trk1 %>%
left_join(id_n) %>%
mutate(random_used = map2(hr1, n, random_points))
# A tibble: 4 x 6
id dat hr hr1 n random_used
<chr> <list> <list> <list> <int> <list>
1 M1 <track_xyt [919 x 3]> <kde [7]> <sf [1 x 4]> 919 <random_points [919 x 3]>
2 M4 <track_xyt [8,958 x 3]> <kde [7]> <sf [1 x 4]> 8958 <random_points [8,958 x 3]>
3 F2 <track_xyt [3,004 x 3]> <kde [7]> <sf [1 x 4]> 3004 <random_points [3,004 x 3]>
4 F1 <track_xyt [1,349 x 3]> <kde [7]> <sf [1 x 4]> 1349 <random_points [1,349 x 3]>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.