我想知道是否可以通过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)
我也可以解释为什么这是一个坏主意(副作用,函数式编程等)
答案 0 :(得分:1)
使用f
功能:
setattr