r - 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(name_of_table)就可以了。如果相反,我尝试:
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
之前有人指出我这篇文章:R using get() inside colnames
但是 eval(parse(paste0("colnames(",name_of_table,")<- first_level_header"))),除了可怕之外,也不起作用:文件中的错误(文件名,“r”):无法打开连接
我不明白涉及 SetNames 的建议。
如果 get/assign 不是正确的方法,我深表歉意,当然我想以“正确”的方式做到这一点,我感谢您的指导。
解决方案
你可以使用library(data.table)
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
推荐阅读
- c++ - 移动构造函数和移动赋值运算符在不将指针作为成员变量且不管理资源的类中有意义吗?
- python - 如何使用 pygame.draw.line 设置 alpha 透明度属性?
- python - 如何使用 BDFR 从 Reddit 下载所有保存的图片?
- haskell - 为什么 Haskell 在 Real 上实现 Enum?
- php - 使用嵌套数组解码 json 响应并循环到表 php
- javascript - React-native-action-button : 改变动作项的位置
- c# - 嵌入式文档与另一个表的 Linq 连接
- javascript - 将鼠标悬停在文本上并显示图像
- reactjs - 如何渲染父组件和子组件?
- css - OpenTypeFont 不显示在 Firefox 和 Safari 上