我正在编写一个函数来在我用来运行某些ML模型的现有数据集中创建一些预测变量。我的功能如下:
doall <- function(x1, x2){
J48 <- J48(ML, data=df1)
#summary(J48)
X1 <- predict(J48, df1, type="class")
X2 <- predict(J48, df2, type="class")
#return(X1)
}
doall(df1$DT_predict, df2$DT_predict1)
J48
是决策树模型(通过RWeka)。我相信,代码正常工作(doall(df1$DT_predict1, df2$DT_predict1)
),因为当我包含return
函数时,它会返回X1
的值。但是,预测变量不会生成/存储在数据帧(df1和df2)中。理想情况下,我希望在函数中包含数据框名称,但这是下一步。
有人可以展示如何将变量X1
和X2
分别存储在数据框df1
和df2
中。
答案 0 :(得分:2)
理想情况下,您的问题会提供更多信息,了解数据框的外观,X1和X2的外观以及数据框的存储位置。对于我的回答,我假设您的数据框存储在全局环境中,并且您希望通过函数修改它们。
这个问题与范围界定有关。有关范围界定的深入描述,请查看本文http://adv-r.had.co.nz/Functions.html#lexical-scoping
首先,通过在函数中分配变量,您将在本地环境中分配它们。这意味着您分配的变量不会延续到全局环境中(您在键入ls()
时看到的内容。
我相信你要么想要改变一个全局变量&#39;来自一个功能。这是由
完成的<<-
命令
例如
a <- 2
print(a)
返回2
change_a<-function(x){
x<-x*4
}
change_a(a)
print(a)
仍会返回2
而
change_a<-function(x){
x<<-x*4
}
change_a(a)
print(a)
会返回8
我认为您希望使用<<-
运算符代替<-
来完成您想要的操作。
在相关的说明中,通常不认为从函数中分配和更改全局变量是最佳实践。