我需要在使用map2的函数中嵌套列表吗?

问题描述

这似乎很愚蠢,或者答案就在我的鼻子前面,但是我不确定如何使此功能正常运行。

我想编写一个名为loop函数,该函数一个数据帧df进行分组拆分,然后在每个这些数据帧中运行一个称为test函数

另一方面,test将数据集df和行索引i作为其参数,并返回一个列表。

为便于说明,请假设:

    test <- function(i,df){
   df$V2[1:i]
}

然后,loop会执行其他一些与该问题无关紧要的事情。

这是我尝试做的事情:

loop1 <- function(df){
  
  df1 <- df %>% 
         group_split(UF)

  x <- df1 %>% 
    map(~ .x %>%
          nrow() %>%
          seq())

  z <- map2(x,df1,~ .x %>% map(~ .x %>% test(df = .y)))
  

  return(z)
}

如果我只对一个数据帧test运行d,我会做map(1:nrow(df),~ test(.,df = d))

很遗憾,我的函数loop1无法正常工作。如何调整它,使其针对test中每个数据集的每一行运行df1

这里是一个例子:

df <- data.frame(UF = c(1,1,2,3,4,4),V2 = 1:8)

结果是什么?

  list(list(1,1:2),list(3,3:4),list(5),list(6,6:7,6:8)
  )

解决方法

在这一行

compileSdkVersion 28

targetSdkVersion 28的范围/用途令人困惑。使用匿名函数清除范围,或在代码中进行最少更改的情况下检查以下函数。

z <- map2(x,df1,~ .x %>% map(~ .x %>% test(df = .y)))

返回:

.x