这是“必须有这个功能”的问题之一。这并不是什么大不了的事情,但是每次我重命名一个对象时我都很烦恼,我想知道是否有更好的方法。
假设我将我创建的对象大写,并意识到我宁愿让它没有资本化:
# Create test data
X <- runif(100)
# Rename the object
x <- X
rm(X)
是否有一种单命令方式(由于内存/速度原因,这也避免了重新复制)?在各种包中有一些名为rename
的命令,但它们都在列表中的元素上工作,而不是在列表(或其他对象)本身上工作。
答案 0 :(得分:3)
我不知道有这样做的内置方法,但你可以轻松编写自己的函数来做这些事情。例如,这样做就是没有任何检查以确保对象存在,或者是否已经有一个名为你想要重命名的对象。
mv <- function(x, y){
x_name <- deparse(substitute(x))
y_name <- deparse(substitute(y))
assign(y_name, x, pos = 1)
rm(list = x_name, pos = 1)
invisible()
}
使用一些示例
> x <- 3
> x
[1] 3
> y
Error: object 'y' not found
> mv(x, y)
> x
Error: object 'x' not found
> y
[1] 3
编辑:对于那些没有按照评论链接的人来说,Rolf Turner编写的版本会做一些检查以确保我们想要移动的对象确实存在,并询问我们是否要覆盖现有的对象,如果新名称中已有对象。
mv <- function (a, b) {
anm <- deparse(substitute(a))
bnm <- deparse(substitute(b))
if (!exists(anm,where=1,inherits=FALSE))
stop(paste(anm, "does not exist.\n"))
if (exists(bnm,where=1,inherits=FALSE)) {
ans <- readline(paste("Overwrite ", bnm, "? (y/n) ", sep = ""))
if (ans != "y")
return(invisible())
}
assign(bnm, a, pos = 1)
rm(list = anm, pos = 1)
invisible()
}