我有一个经常出现的情况,我在一组长的 R 代码的顶部设置了一个值,该代码用于对一个或多个数据帧进行子集化。像这样的东西:
city_code <- "202"
在整个过程结束时,我想将结果保存在一个适当命名的数据框中,例如,基于将“city_code”附加到一个公共(public) stub 。
city_results <- paste("city_stats", city_code, sep = "")
我的问题是我不知道如何将结果数据框重命名为“city_results”的值。那里有很多关于如何重命名数据框列的信息,但没有关于如何重命名数据框本身的信息。根据提议的答案,这里有一个澄清:
谢谢,@mike-wise。有助于研究手头有具体问题的 Hadley 的 Advanced R。
library(dplyr)
gear_code <- 4
gear_subset <- paste("mtcars_", gear_code, sep = "")
mtcars_subset <- mtcars %>% filter(gear == gear_code)
head(mtcars_subset)
write.csv(mtcars_subset, file = paste(gear_subset, ".csv", sep = ""))
这让我可以将子集写入一个适当命名的 csv 文件。但是,您的建议很有效,但我不能,例如,用新名称引用 data.frame:
assign(gear_subset, mtcars_subset)
head(gear_subset)
最佳答案
事实是,R 中的对象本身没有名称。存在不同类型的环境,包括每个进程的全局环境。这些环境具有指向各种对象的名称列表。两个不同的名称可以指向同一个对象。据我所知,这在 Hadley Wickhams Advanced R 书的环境章节中得到了最好的解释
http://adv-r.had.co.nz/Environments.html
所以没有办法改变数据框的名称,因为没有什么可以改变的。
但是您可以使一个新名称(如 newname
)指向与给定名称(如 oldname
)相同的对象(在您的情况下为数据框对象),只需执行以下操作:
newname <- oldname
请注意,如果您更改其中一个变量,则会生成一个新副本,并且内部引用将不再相同。这是由于 R 的“修改时复制”语义。请参阅此帖子以获取说明:What exactly is copy-on-modify semantics in R, and where is the canonical source?
希望有帮助。我知道痛苦。动态和函数式语言不同于静态和过程语言......
当然,可以为数据帧计算一个新名称并将其注册到环境中,并使用
assign
。命令 - 也许你正在寻找这个。然而,事后提及它会相当令人费解。示例(假设
df
是有问题的数据帧): assign( paste("city_stats", city_code, sep = ""), df )
一如既往地查看
assign
的帮助。更多信息http://stat.ethz.ch/R-manual/R-devel/library/base/html/assign.html编辑:
回复您的编辑,以及有关使用
eval(parse(...)
问题的各种评论您可以像这样解析名称:head(get(gear_subset))
关于r - 如何更改数据框的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225715/