Столбец, передаваемый в качестве фрейма данных после присвоения имен аргументам в пользовательской функции

#r #statistics

#r #Статистика

Вопрос:

[Новичок здесь] Застрял в очень странной проблеме. У меня есть функция для вычисления задержки, она отлично работает, когда аргументы не названы в функции, но не работает, когда я даю им имя.

Следующий код не работает и выводит «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:

в аргументе вашей функции:

 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 были определены.