R:使用函数定义数据集内的变量

时间:2015-07-08 23:02:19

标签: r

我希望看到一个模型在我制作变量时的表现' year'分段线性。我知道有一些自动方法可以在模型中定义它并寻找最佳切点。不过,我更喜欢制作一个分段变量,因为它对我更透明,此外,我认为这个问题的解决方案在其他场合也有帮助。

所以我想把变量定义为

piece.var.fun<-function(up,down,i,data){

  within(data,{

    up<-0
    up[year>=i]<-year[year>=i]-i
    up[year<i]<-rep(0,sum(year<i))


    down<-0
    down[year<=i]<-year[year<=i]-1995 
    down[year>i]<-rep(i-1995,sum(year>i))
})
}


test.dataset<-piece.var.fun(up="year2000up",down="year2000down",data=StartM,i=2000)

因此那一年与1997年的分界线分开。

我希望从1997年到2011年这一年都能做到这一点并自动完成这个过程,我写了一个函数:

{{1}}

这个想法是将这个函数与包含我想要的名字的向量上的mapply结合使用,变量只是上下调用而不是year2000up和year2000down。这样,我就无法使用它来制作不同年份的变量,因为它们的名称都相同。

那么,我怎样才能使用这样的函数并使变量的名称包含年份?

1 个答案:

答案 0 :(得分:1)

使用assign

yr <- 1995
varname <- sprintf('year%idown', yr)
down <- # ... define `down` as before

assign(varname, down)

您可以更轻松地创建up,例如

up <- cumsum(year > i)

除此之外:你的down对我来说没有多大意义 - 为什么硬编码的1995?为什么你最后坚持'2'?我想你可以像up那样构建它,具体取决于你想要的东西。

另一方面:另外,如果您已使用updown内构建piece.var.funi,则无需传入变量名称“year2000up”进入功能?但无论如何,这是你问题的边缘。

但无论如何,要回答您的问题,要在变量名称中包含年份,您需要使用变量名称创建一个字符串并使用assign