我希望看到一个模型在我制作变量时的表现' 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。这样,我就无法使用它来制作不同年份的变量,因为它们的名称都相同。
那么,我怎样才能使用这样的函数并使变量的名称包含年份?
答案 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
那样构建它,具体取决于你想要的东西。
另一方面:另外,如果您已使用up
在down
内构建piece.var.fun
和i
,则无需传入变量名称“year2000up”进入功能?但无论如何,这是你问题的边缘。
但无论如何,要回答您的问题,要在变量名称中包含年份,您需要使用变量名称创建一个字符串并使用assign
。