在用户定义的函数中命名参数后,列作为数据帧传入

时间:2016-10-19 12:44:33

标签: r statistics

[新手在这里]困在一个非常奇怪的问题。我有一个计算滞后的函数,它在函数中没有命名参数时工作正常,但是当我给它们命名时它没有。

以下代码不起作用,并打印" data.frame"作为参数类a(当我通过专栏时)

lagger = function(ind = a,dep = c,lag = b){
  print(class(a))
  print(paste("linear correlation" ,cor(a,c), sep=" "))
  print(paste("log linear correlation:" ,cor(log(a),c), sep=" "))
  print(paste("log log correlation:" ,cor(log(a),log(c)), sep=" "))
  for (i in 1:b){
    del = a
    del <- c(rep(NA,i),a[1:(NROW(a)-i)])
    corr = (cor(del,c,use="complete"))
    corr_log = cor(del,c,use="complete")
    corr_log_log = cor(log(del),log(c),use="complete")
    print(paste(" lag of" ,i , "unit/s :" , round(corr,3) ,"log",round(corr_log,3),"log log",round(corr_log_log,3), sep = "      ") )

  }

}

虽然此代码有效:

lagger = function( a,c,b){
  print(class(a))
  print(paste("linear correlation" ,cor(a,c), sep=" "))
  print(paste("log linear correlation:" ,cor(log(a),c), sep=" "))
  print(paste("log log correlation:" ,cor(log(a),log(c)), sep=" "))
  for (i in 1:b){
    del = a
    del <- c(rep(NA,i),a[1:(NROW(a)-i)])
    corr = (cor(del,c,use="complete"))
    corr_log = cor(del,c,use="complete")
    corr_log_log = cor(log(del),log(c),use="complete")
    print(paste(" lag of" ,i , "unit/s :" , round(corr,3) ,"log",round(corr_log,3),"log log",round(corr_log_log,3), sep = "      ") )

  }

}

为什么呢? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

函数参数中的

ind = a

表示参数ind的每个默认值都是a。 ind是您的参数的名称,因此您必须在函数中使用它而不是a

试试这个:

lagger <- function(ind,dep,lag){
  print(class(ind))
  print(paste("linear correlation" ,cor(ind,dep), sep=" "))
  print(paste("log linear correlation:" ,cor(log(ind),dep), sep=" "))
  print(paste("log log correlation:" ,cor(log(ind),log(dep)), sep=" "))
  for (i in 1:lag){
    del = ind
    del <- c(rep(NA,i),ind[1:(NROW(ind)-i)])
    corr = (cor(del,dep,use="complete"))
    corr_log = cor(del,dep,use="complete")
    corr_log_log = cor(log(del),log(dep),use="complete")
    print(paste(" lag of" ,i , "unit/s :" , round(corr,3) ,"log",round(corr_log,3),"log log",round(corr_log_log,3), sep = "      ") )

  }

}

然后当您使用您的功能时,您可以使用

lagger(ind = a, dep =c, lag = b) 

如果定义了a,b和c。