我有一个经常出现的情况,我在一组R代码的顶部设置了一个值,该代码用于对一个或多个数据帧进行子集化.像这样的东西:
city_code <- "202"
Run Code Online (Sandbox Code Playgroud)
在整个过程结束时,我想将结果保存在一个适当命名的数据框中,比如说,基于将"city_code"附加到公共存根.
city_results <- paste("city_stats", city_code, sep = "")
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法弄清楚如何将结果数据框重命名为'city_results'的值.有很多关于如何重命名数据框列的信息,但没有关于如何重命名数据框本身的信息.基于提出的答案,这里有一个澄清:
谢谢,@迈克明智.有助于学习哈德利的高级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 = ""))
Run Code Online (Sandbox Code Playgroud)
这让我可以将子集写入适当命名的csv文件.但是,您的建议有点可行,但我不能,例如,使用新名称引用data.frame:
assign(gear_subset, mtcars_subset)
head(gear_subset)
Run Code Online (Sandbox Code Playgroud)
Mik*_*ise 15
事实是R中的对象本身没有名称.存在不同类型的环境,包括用于每个过程的全局环境.这些环境具有名称列表,指向各种对象.两个不同的名称可以指向同一个对象.根据我对Hadley Wickhams Advanced R书籍http://adv-r.had.co.nz/Environments.html环境章节的了解,这是最好的解释.
所以没有办法改变数据框的名称,因为没有什么可以改变的.
但是你可以创建一个新名称(比如newname)指向同一个对象(在你的情况下是一个数据框对象)作为一个给定的名字(比如oldname),只需做:
newname <- oldname
Run Code Online (Sandbox Code Playgroud)
请注意,如果更改其中一个变量,则会生成新副本,并且内部引用将不再相同.这是由于R的"复制修改"语义.请参阅这篇文章以获得解释:R中的copy-on-modify语义到底是什么,以及规范来源在哪里?
希望有所帮助.我知道痛苦.动态和函数语言与静态和过程语言不同......
当然,可以计算数据帧的新名称,并使用assign命令在环境中注册它- 也许您正在寻找这个.然而,事后提到它会相当复杂.
示例(假设df是有问题的数据帧):
assign( paste("city_stats", city_code, sep = ""), df )
Run Code Online (Sandbox Code Playgroud)
如需assign了解更多信息,请随时查看帮助http://stat.ethz.ch/R-manual/R-devel/library/base/html/assign.html
编辑:回复你的编辑,以及围绕使用问题的各种评论eval(parse(...)你可以像这样解析名称:
head(get(gear_subset))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65932 次 |
| 最近记录: |