r - rsample vfold_cv 函数不接受来自 purrr::map2 的 .y 参数
问题描述
我正在尝试使用该包创建嵌套的交叉验证rsample
,并且我使用它purrr::map2
来创建它们多次,并根据v
参数的规定使用不同的折叠量。但是,该vfold_cv
函数不接受v
参数,而是出现此错误:Error: v must be a single integer.
在下面的代表中,我mtcars
通过为每个圆柱体创建交叉验证来模拟使用数据的情况。用数字替换是可行的,但我需要使用该列.y
使参数随每个气缸而变化。n
图书馆(咕噜) 图书馆(欧洲防风草) 库(rsample) 图书馆(tidyr) 数据(“mtcars”) 嵌套 <- mtcars %>% 选择(气缸,显示:齿轮)%>% group_by(cyl) %>% 嵌套(数据=显示:齿轮)%>% cbind(n = 2:4) 嵌套 %>% group_by(cyl) %>% 变异(cv = map2(数据,n, ~nested_cv(.x, 里面= vfold_cv(v = 10,重复= 3), 外部 = vfold_cv(v = .y))))
错误:`v` 必须是单个整数。
解决方案
这是nested_cv里面的vfold_cv函数,你可以试试:
createNested = function(x,y){
nested_cv(x,inside = vfold_cv(v = 10, repeats = 3),outside = vfold_cv(v = y))
}
createNested(nested$data[[1]],3)
Error in vfold_splits(data = data, v = v, strata = strata, breaks = breaks) :
object 'y' not found
所以它看不到y
函数内部的变量(比如你的 .y)。所以我写了一个函数来显式地将vfold_cv()
for outside的结果传递给nested_cv()
,多几行代码,但没关系:
createNested = function(x,y){
outside_cv = vfold_cv(x,v = y)
nested_cv(x,inside = vfold_cv(v = 10, repeats = 3),outside = outside_cv)
}
nested <- mtcars %>%
select(cyl, disp:gear) %>%
nest(data = disp:gear) %>%
mutate(n=2:4)
nested %>% mutate(cv = map2(data,n,.f=createNested))
# A tibble: 3 x 4
cyl data n cv
<dbl> <list> <int> <list>
1 6 <tibble [7 × 8]> 2 <tibble [2 × 3]>
2 4 <tibble [11 × 8]> 3 <tibble [3 × 3]>
3 8 <tibble [14 × 8]> 4 <tibble [4 × 3]>
注意,一旦你嵌套了数据,你就不需要group_by()
推荐阅读
- java - 流 (OOP) 在程序集级别上是如何表示的?
- binding - 想在方程式中使用@Binding 变量
- java - Android App 的 Java App 是否与 Java SE 兼容?
- python - IF 语句到按钮
- google-bigquery - 字符串列表上的 BigQuery 左连接返回 null
- laravel - SQLSTATE [42000]:语法错误或访问冲突:1064 在进行迁移时,您的 SQL 语法有错误
- c++ - 如何在 GDB 中打印与程序流相关的源文件中的所有行号
- android - AlarmManager 未取消
- node.js - UseState() 函数中的错误 - 预期的;
- jmeter - 为什么在查看结果树中,URL 显示为加号,并且在扩展后显示为 'URL'-0 和 'URL'-1