向函数内的DataFrame添加新列

向函数内的DataFrame添加新列,r,dataframe,R,Dataframe,我有一个数据帧(称为train),其中包含YOB(出生年份)列。我想在一个单独的列中计算年龄,如下所示: 列车$Age=2016年-列车$YOB 这个很好用 问题是,我还想对许多其他数据帧执行此操作(以及其他预处理操作)。因此,我想提取函数中的公共部分,并将要处理的数据帧作为参数传递给函数: preprocess=函数(d){ d$Age=2016年-d$YOB #其他转换。。。 } 在定义了上面的函数之后,我希望调用preprocess(train)将在我的数据帧上执行上述转换。但事实并

我有一个数据帧(称为
train
),其中包含
YOB
(出生年份)列。我想在一个单独的列中计算年龄,如下所示:

列车$Age=2016年-列车$YOB
这个很好用

问题是,我还想对许多其他数据帧执行此操作(以及其他预处理操作)。因此,我想提取函数中的公共部分,并将要处理的数据帧作为参数传递给函数:

preprocess=函数(d){
d$Age=2016年-d$YOB
#其他转换。。。
} 
在定义了上面的函数之后,我希望调用
preprocess(train)
将在我的数据帧上执行上述转换。但事实并非如此。例如,
train$Age
在调用后为
NULL


为什么
preprec
函数不按预期转换数据帧?是否有办法解决此问题?

您只在函数内部添加新列,但函数通常不会更改该函数外部的值。有一种快速而肮脏的方法,通过只在函数内部添加新列,但函数通常不会更改该函数外部的值。在R(以及几乎所有语言)中,有一种快速而肮脏的方法是通过,当控制转移到函数时,解释器设置函数中可用变量的“范围”

考虑变量a和b以及函数“preprocess”:

>a b预处理cat(“a的值=”,a,“\n”)
a的值=2
在这里,变量“a”和“b”在函数中都是可见的,并且变量“a”的值在函数的范围内确实发生了变化。 但函数完成并返回后,该环境就被丢弃,变量的更新值“丢失”

变量的全局值(之前为2)保持不变

但是,如果从函数返回“a”的值,则“a”的值将发生更改,请参见此示例:

> a <- 2
> b <- 3
> preprocess <- function(a){a <- a + b; cat("value of a=", a, "\n"); return(a)}
> a <- preprocess(a)
value of a= 5 
> cat("value of a=", a, "\n")
value of a= 5
>a b preprocess在R(以及几乎所有语言)中,当控制权转移到函数时,解释器设置函数中可用变量的“范围”

考虑变量a和b以及函数“preprocess”:

>a b预处理cat(“a的值=”,a,“\n”)
a的值=2
在这里,变量“a”和“b”在函数中都是可见的,并且变量“a”的值在函数的范围内确实发生了变化。 但函数完成并返回后,该环境就被丢弃,变量的更新值“丢失”

变量的全局值(之前为2)保持不变

但是,如果从函数返回“a”的值,则“a”的值将发生更改,请参见此示例:

> a <- 2
> b <- 3
> preprocess <- function(a){a <- a + b; cat("value of a=", a, "\n"); return(a)}
> a <- preprocess(a)
value of a= 5 
> cat("value of a=", a, "\n")
value of a= 5

>a b preprocess
preprocess=function(d)d$Age@crayfish44现在我收到一个错误,说“closure”类型的对象不可子集
preprocess=function(d)d$Age@crayfish44现在我收到一个错误,说“closure”类型的对象不可子集
> a <- 2
> b <- 3
> preprocess <- function(a){a <- a + b; cat("value of a=", a, "\n"); return(a)}
> a <- preprocess(a)
value of a= 5 
> cat("value of a=", a, "\n")
value of a= 5