首页 > 解决方案 > 如何从 R 中的 mapply 或 Map 函数中的数据列表中选择 2 个变量?

问题描述

我有一个数据框列表,其中 2 个变量:utmX 和 utmY 将用于此分析。

在下面的代码中,我试图:1)编写 L.fun() 2)将此 L.fun() 应用于数据帧列表 3)分别绘制每个数据帧的结果。

L.fun <- function(x, y){
  window <- ripras(x, y)
  p.patt <- ppp(x, y, window=window)
  L <- Lest(p.patt, correction="Ripley")
  return(L)
}

 data.list <- list(data1,data2,data3...data30)

 L.res <- mapply(L.fun, data.list$utmX, data.list$utmY)  # empty
 L.res <- mapply(L.fun, x$utmX, x$utmY) # x object not found
 L.res <- Map(L.fun, data.list)         # arg y is missing 
 plot(L.res)

我也通过在函数中包含 x 和 y 来尝试这个,但仍然无法正常工作。

 L.res <- lapply(data.list, function(x) {
    for(i in 1:nrow(x)){
       window <- ripras(x$utmX, x$utmY)
       p.patt <- ppp(x$utmX, x$utmY, window=window)
       x$L <- Lest(p.patt, correction="Ripley")
   }
   x
 })

所以我的问题是如何从数据列表中选择 2 个用于 mappy 和 Map 函数的变量?

非常感谢!

标签: listfor-loopapplymap-functionspatstat

解决方案


对您的第二次尝试稍作修改应该会起作用。

library(spatstat)

首先生成 2 个假数据集的列表:

data.list <- replicate(2, data.frame(utmX=runif(20), utmY=runif(20)), simplify = FALSE)

遍历列表并将 L 函数应用于列表中的每个数据集:

L.res <- lapply(data.list, function(x) {
  window <- ripras(x$utmX, x$utmY)
  p.patt <- ppp(x$utmX, x$utmY, window=window)
  return(Lest(p.patt, correction="Ripley"))
})

结果是两个 L 函数的列表,如图所示:

plot.anylist(L.res)

reprex 包(v0.2.1)于 2019 年 3 月 14 日创建


推荐阅读