问题描述
这似乎很愚蠢,或者答案就在我的鼻子前面,但是我不确定如何使此功能正常运行。
我想编写一个名为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