问题描述
我的目标是在数据框中设置列名。该数据帧的名称存储在变量name_of_table中。
name_of_table<-"table_13"
assign(name_of_table,read.csv("table_13_air_vehicle_risks_likelihood_and_cost_effects.csv",header=FALSE))
# This works fine,like table_13 <- read.csv(...)
first_level_header <- c("one","two","three","four","five")
colnames(get(name_of_table)) <- first_level_header
# Throws error:
#Error in colnames(get(name_of_table)) <- first_level_header :
# could not find function "get<-"
很明显,如果我用 table_13 代替 get(表的名称),则此方法有效。 如果相反,我尝试:
colnames(names(name_of_table)) <- first_level_header
#Throws error: Error in `colnames<-`(`*tmp*`,value = c("one",: attempt to set
#'colnames' on an object with less than two dimensions
早些时候我曾指向这篇文章:R using get() inside colnames
但是eval(parse(paste0(“ colnames(”,name_of_table,“) file(filename,“ r”)中的错误:无法打开连接
我不理解涉及SetNames的建议。
如果获得/分配不是正确的方法,我深表歉意,我当然希望以“正确”的方式进行此操作,我感谢指导。
解决方法
您可以使用library(data.table)
table_13 = data.table(1:5,1:5,1:5)
setnames(get(name_of_table),first_level_header) # N.B. also works for a data.frame
# one two three four five
# 1: 1 1 1 1 1
# 2: 2 2 2 2 2
# 3: 3 3 3 3 3
# 4: 4 4 4 4 4
# 5: 5 5 5 5 5