我正在尝试编写一个函数,当我调用它时,它将向数据框中添加一个新列,而不进行任何明确的赋值。 即我只是想调用带参数的功能,并把它修改数据帧:从R中的函数内修改全局数据
input_data:
x y
1 2
2 6
column_creator<-function(data,column_name,...){
data$column_name <- newdata ...}
column_creator(input_data,new_col,...)
x y new_col
1 2 5
2 6 9
至于反对:
input_data$new_col <- column_creator(input_data,new_col,...)
但是这样做在函数内部分配不修改全局变量。
我正在通过让函数返回一个赋值语句(下面的函数中的temp)来解决这个问题,但是有没有另外一种方法来做到这一点?
这里是我的函数供参考,它应该在名称为dummy_name的情况下在提供的开始日期和结束日期之间创建一个1的列。
dummy_creator<-function(data,date,dummy_name,start,end){
temp<-paste(data,"['",dummy_name,"'] <- ifelse(",data,"['",date,"'] > as.Date (","'" , start,"'" , ", format= '%Y-%m-%d') & ",data,"['",date,"'] < as.Date(", "'", end,"'" ,",format='%Y-%m-%d') ,1,0)",sep="")
print(temp)
return()
}
感谢
我也试过:
dummy_creator<-function(data,date,dummy_name,start,end){
data[dummy_name] <<- ifelse(data[,date] > as.Date (start, format= "%Y-%m-%d") & data[,date] < as.Date(end,format="%Y-%m-%d") ,1,0)
}
但是,尝试给了我错误object of type closure is not subsettable
。
你可以用超赋值运算符'<<尝试 - '。 – RHertel
@RHertel没有没有工作,它给了我类型闭包的错误对象不是子集表单,当不存在东西时就会出现。 – user124123