通过引用设置原子矢量名称

时间:2015-07-10 15:36:38

标签: r data.table pass-by-reference

我想知道是否可以通过R中的引用来设置矢量名称。

我经常使用data.table::fread来读取文本文件,然后通过包装setnames(也适用于普通data.frame)和字符串清理函数来清理变量名称到:

clean_var_name <- function(s) {
  gsub("^_+|_+$","",gsub("(\\s|\\-|[[:punct:]])+", "_", tolower(s) ) )
}

所以我的功能如下:

clean_names <- function(x){
  require(data.table)
  if(is.data.frame(x)){setnames(x, names(x), clean_var_name(names(x)))} # this part works
  else if(is.vector(x)){ do_something_here } # this is the question
}

我想知道是否有办法以一种通过引用执行names(x) <- clean_var_name(names(x))的方式将向量包含在同一函数中。

v <- c(`thIs.Is.A.Terrible-Name`=1, `this One is TOO`=2)
dt <- data.table(t(v))
clean_names(dt)
dt 
#    this_is_a_terrible_name this_one_is_too
# 1:                       1               4    
# would like to be able to do same for clean_names(v)

我也可以解释为什么这是一个坏主意(副作用,函数式编程等)

1 个答案:

答案 0 :(得分:1)

使用f功能:

setattr