R 向函数中的数据帧添加列不起作用

R 向函数中的数据帧添加列不起作用,r,R,我试图将一列添加到函数中的数据框中,当我运行它时,我没有得到任何错误,但该列不在全局环境中的数据框中。这是我的代码: scale.it<-function(df,var,newvar){ varn<-as.numeric(df[[var]]) last<-max(varn) #df[[newvar]]<-varn/last return(df[[newvar]]<-varn/last) } scale.it(go.cubs.go,"PAge","IP

我试图将一列添加到函数中的数据框中,当我运行它时,我没有得到任何错误,但该列不在全局环境中的数据框中。这是我的代码:

scale.it<-function(df,var,newvar){
  varn<-as.numeric(df[[var]])
  last<-max(varn)
  #df[[newvar]]<-varn/last
  return(df[[newvar]]<-varn/last)
}
scale.it(go.cubs.go,"PAge","IPAge")

scale.it通过引用/指针调用在R中并不是一件真正的事情,尽管您可以使用
R.oo包
。在Base R中执行此操作的一种方法是在父帧中求值。在这种情况下,更改将发生在“指向”的对象上。这主要是
数据的工作。表
具有
:=
功能。下面是一个简单的例子:

scale.it<-function(df,var,newvar){
  varn<-as.numeric(df[[var]])
  last<-max(varn)
  eval.parent(substitute(df[[newvar]]<-varn/last))
}

m = head(iris)
scale.it(m,"Sepal.Width","sss")
m
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species       sss
1          5.1         3.5          1.4         0.2  setosa 0.8974359
2          4.9         3.0          1.4         0.2  setosa 0.7692308
3          4.7         3.2          1.3         0.2  setosa 0.8205128
4          4.6         3.1          1.5         0.2  setosa 0.7948718
5          5.0         3.6          1.4         0.2  setosa 0.9230769
6          5.4         3.9          1.7         0.4  setosa 1.0000000

scale。正如其他人在评论中提到的:

  • 函数中声明的变量是该函数的局部变量(请参见:)
  • 您需要将函数的输出分配给变量
  • 例如:

    # Function
    scale.it<-function(df,var,newvar){
      varn<-as.numeric(df[[var]])
      last<-max(varn)
      df[[newvar]]<-varn/last
      return(df) # Return dataframe
    }
    
    # Create data frame
    go.cubs.go <- data.frame('a' = sample(1:10,5, replace = TRUE),
                             'b'= sample(1:10,5, replace = TRUE),
                             'PAge'= sample(1:10,5, replace = TRUE))
    
    # Replace original data frame (or create new one)
    go.cubs.go <- scale.it(go.cubs.go, "PAge", "IPAge")
    
    #函数
    
    scale.it您还可以使用
    变换
    自适应;e、 g.
    go.cubs.go我4个小时前刚加入这个网站,没有足够的“声誉”去投票。我很抱歉,但非常感谢你的帮助。仅供参考,我花了几个小时寻找这个问题的答案,每个人的答案似乎都与下面的用户(Jonathon)的答案相同,后者说在函数外部调用它,但您是第一个向我展示如何在函数内部执行此操作的人,所以谢谢!