在函数内创建的变量未存储在数据框中

时间:2014-07-23 00:33:36

标签: r function

我正在编写一个函数来在我用来运行某些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)中。理想情况下,我希望在函数中包含数据框名称,但这是下一步。

有人可以展示如何将变量X1X2分别存储在数据框df1df2中。

1 个答案:

答案 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

我认为您希望使用<<-运算符代替<-来完成您想要的操作。

在相关的说明中,通常不认为从函数中分配和更改全局变量是最佳实践。