繁体   English   中英

R 中的 purrr 包:如何对通过 map() 应用于嵌套数据的函数使用不断变化的参数

[英]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)))

我想这就是你要找的——我们使用map2random_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.

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