R get()和assign()不能与colnames()一起使用
我的目标是在数据帧上设置列名。此数据帧的名称存储在变量名_of_表中R get()和assign()不能与colnames()一起使用,r,R,我的目标是在数据帧上设置列名。此数据帧的名称存储在变量名_of_表中 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(...) firs
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<-"
name\u of_table您可以使用library(data.table)
使用assign
以编程方式读取CSV文件并分配给帧很少是一个好主意;如果您是动态执行此操作,最好将它们读入,因为在执行此操作时,通常会对列表中的所有帧执行相同的操作。我会将data.frame放入列表中,然后进一步,在一些选择示例中,使用get
和assign
可能有意义,但通常表明数据管理方法存在缺陷。这可能是一种主观的方法,但我认为你会发现大多数R爱好者(和-ADA)在大多数情况下都会避免使用它们。但要回答你的问题,我认为错误很明显:不要将get
嵌套在`colnames中,因为你已经在使用assign
,你可以执行assign(name\u of_table,`names
colnames(names(name_of_table)) <- first_level_header
#Throws error: Error in `colnames<-`(`*tmp*`, value = c("one", "two", "three", "four", : attempt to set
#'colnames' on an object with less than two dimensions
table_13 = data.table(1:5, 1:5, 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