R脚本错误 - 将值应用于dataframe变量

时间:2012-11-29 20:36:19

标签: r dataframe

使用R脚本时遇到困难。如果我在命令行中运行此行,它将完美地运行

dbnasc$ano[which(dbnasc$ano>=1605 & dbnasc$ano<1610)]=1605

但是如果在其中定义具有相同代码的函数不起作用

#Função recode
xclass1=function(ini,fim,per){
t=seq(ini,fim,by=per)
z=length(t)
i=1
while(i<z){
  a0=t[[i]]
  a1=t[[i+1]]
  dbnasc$ano[which(dbnasc$ano>=a0 & dbnasc$ano<a1)] = a0
  i=i+1
  } 
}

3 个答案:

答案 0 :(得分:3)

(差不多)所有函数都应该返回一些东西。您的函数不返回任何内容,因此不会修改任何变量(除了那些仅为了执行函数而暂时存在的变量)。

尝试使用return()函数返回要在函数末尾保留的变量,或者可以省略return并只提供变量名称:

#Função recode
xclass1=function(dbnasc, ini,fim,per){
  t=seq(ini,fim,by=per)
  z=length(t)
  i=1
  while(i<z){
    a0=t[[i]]
    a1=t[[i+1]]
    dbnasc$ano[which(dbnasc$ano>=a0 & dbnasc$ano<a1)] = a0
    i=i+1
  } 
  dbnasc
  #or `return(dbnasc)`
}

现在,您的函数需要一个名为dbnasc的变量作为输入,然后返回该变量以及该函数期间所做的修改。您可以使用以下内容来调用它:

dbnasc <- xclass1(dbnasc, etc, etc)

如果要将结果分配回原始变量。

答案 1 :(得分:2)

如果我理解正确,您正在尝试重新编码表示一年的整数变量。所需的转变是将年份间隔转变为一年。例如。如果你有年份c(1988年,1993年,1997年,1999年),将他们按十年分为c(1980年,1990年,1990年,1990年)。如果这确实是你想要的,那么这是一种更简单的方法:

year.recoded <- year - year %% interval

控制台中的一个示例:

> x <- c(1988, 1993, 1997, 1999)
> x - x %% 10
[1] 1980 1990 1990 1990

答案 2 :(得分:1)

在检查Jeff的解决方案之后,我的函数重新编码看起来像:

  1. 数据帧

    dataframe

  2. xclass11函数从datanasc重新编码年份,提供第一个最后间隔


  3. #Função recode
    xclass11=function(ini,fim,per){
    t=seq(ini,fim,by=per)
    z=length(t)
    i=1
    ano=as.numeric(format(as.Date(dbnasc$datanasc), "%Y"))
    while(i<z){
      a0=t[[i]]
      a1=t[[i+1]]
      ano[which(ano>=a0 & ano<a1)]=a0
      i=i+1
      } 
    dbnasc=cbind(dbnasc,ano)
    return(dbnasc)
    }
    

    使用功能

    dbnasc = xclass11(1600,1900,25)

    谢谢Jeff和Alexander。