Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将自定义函数应用于嵌套数据帧?_R_Dplyr_Purrr_Broom - Fatal编程技术网

R 如何将自定义函数应用于嵌套数据帧?

R 如何将自定义函数应用于嵌套数据帧?,r,dplyr,purrr,broom,R,Dplyr,Purrr,Broom,我正在尝试将自定义函数应用于嵌套的数据帧 我想应用机器学习算法来预测NA值 在做了一点在线阅读之后,似乎地图功能在这里最适用 我有一段代码嵌套了数据帧,然后将数据拆分为测试(data3)和训练(data2)集——测试数据集包含要预测的列的所有空值,训练集包含要用于训练ML模型的所有非空值 dmaExtendedDataNA2 <- dmaExtendedDataNA %>% group_by(dma) %>%

我正在尝试将自定义函数应用于嵌套的数据帧

我想应用机器学习算法来预测NA值

在做了一点在线阅读之后,似乎地图功能在这里最适用

我有一段代码嵌套了数据帧,然后将数据拆分为测试(data3)和训练(data2)集——测试数据集包含要预测的列的所有空值,训练集包含要用于训练ML模型的所有非空值

dmaExtendedDataNA2 <- dmaExtendedDataNA %>%
                  group_by(dma) %>%
                  nest() %>%
                  mutate(data2 = map(data, ~filter(., !(is.na(mean_night_flow)))),
                         data3 = map(data, ~filter(., is.na(mean_night_flow))))
这表明它需要一个列,而不是一个完整的数据帧。我怎样才能让它工作


非常感谢

没有对您的数据进行测试,我认为您使用了错误的
map
功能
purrr::map
处理一个参数(一个列表、一个向量等)并返回一个列表。您正在向它传递两个值(
data3
data2
),因此我们需要使用:

dmaExtendedDataNA2%
分组依据(dma)%>%
嵌套()%>%
mutate(data2=map(data,~filter(,!(is.na(mean\u night\u flow))),
数据3=map(数据,~filter(,is.na(平均夜间流量)),
data4=map2(data3,data2,~my_函数(.x,.y)))
如果您发现自己需要两个以上,则需要
pmap
。您可以对1个或2个参数使用
pmap
,实际上是相同的。从
map
迁移到
pmap
时,两个最大的区别是:

  • 您的参数需要包含在列表中,因此

    map2(数据3,数据12,…)
    
    变成

    pmap(列表(数据3、数据12),…)
    
  • 您使用双点编号位置引用它们,
    .1
    .2
    .3
    ,等等,所以

    ~my_函数(.x,.y)
    
    变成

    ~my_函数(…1,…2)
    

一个可以稍微简化整体流程的替代方案

myu功能(测试,train=NULL,fld=“平均夜间流量”){
如果(为空(列车)){

训练你好,MGJ,如果您至少提供一个数据样本,其中包含
dput(dmaExtendedDataNA)
dput(dmaExtendedDataNA[1:20,])
。您可以编辑您的问题并粘贴输出。您可以用三个反勾(`````)环绕它以获得更好的格式。有关更多信息,请参阅。
lapply(数据,函数)
用于将函数应用于嵌套列表。
    my_function (test,train) {
             et  <- extraTrees(x = train, y = train[, "mean_night_flow"], na.action = "fuse", ntree = 1000, nodesize = 2, mtry = ncol(train) * 0.9 )
             test1 <- test
             test1[ , "mean_night_flow"] <- 0
             pred  <- predict(et, newdata = test1[, "mean_night_flow"])
             test1[ , "mean_night_flow"] <- pred
             return(test1)
dmaExtendedDataNA2 <- dmaExtendedDataNA %>%
                      group_by(dma) %>%
                      nest() %>%
                      mutate(data2 = map(data, ~filter(., !(is.na(mean_night_flow)))),
                             data3 = map(data, ~filter(., is.na(mean_night_flow))),
                             data4 = map(data3, data2, ~my_function(.x,.y)))
Error: Index 1 must have length 1, not 33