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)的答案相同,后者说在函数外部调用它,但您是第一个向我展示如何在函数内部执行此操作的人,所以谢谢!