get和Assign不适用于colnames

问题描述

我的目标是在数据框中设置列名。该数据帧的名称存储在变量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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...