技术求助:修正R函数以在全局环境生成自定义命名的多组训练与测试数据集
解决你的R自动化生成训练测试集问题
我帮你修正这段代码,先梳理下原代码里的几个关键问题:
- 把
library(caTools)放在函数内部会导致每次调用函数都重复加载包,这完全没必要,应该在全局环境里加载一次就好。 ->>这种赋值语法没法直接对动态生成的变量名生效,要把数据框导出到全局环境,得用assign()函数明确指定目标环境。
下面是修正后的完整代码:
# 先全局加载需要的包 library(caTools) output_2_set_test_train <- function(x){ # 获取输入数据集的名称 dfname <- deparse(substitute(x)) for(i in 1:2){ # 用for循环比while更简洁直观 # 生成拆分标记 split_tag <- sample.split(x[[1]], SplitRatio = 0.75) # 生成训练集并赋值到全局环境 assign( paste0(dfname, "_train_", i), subset(x, split_tag == TRUE), envir = .GlobalEnv ) # 生成测试集并赋值到全局环境 assign( paste0(dfname, "_test_", i), subset(x, split_tag == FALSE), envir = .GlobalEnv ) } } # 测试函数 mydata <- mtcars output_2_set_test_train(mydata)
关键改动说明:
- 包加载位置调整:把
library(caTools)移到函数外,避免重复加载包的冗余操作。 - 替换赋值方式:用
assign()函数替代->>,通过envir = .GlobalEnv参数明确将生成的数据框放到全局环境,同时支持动态拼接变量名。 - 循环优化:把while循环换成更简洁的for循环,逻辑更清晰易读。
运行这段代码后,你的全局环境里就会出现mydata_train_1、mydata_test_1、mydata_train_2、mydata_test_2这四个数据框,完全符合你的命名要求。
内容的提问来源于stack exchange,提问作者Gaurav Arora
相关产品推荐
相关产品推荐

