gpt4 book ai didi

r - R 中是否有 "move"命令(相当于 <- 后跟 rm)?

转载 作者:行者123 更新时间:2023-12-04 10:51:14 24 4
gpt4 key购买 nike

这是“必须有一个功能”的问题之一。这没什么大不了的,但它很烦人,每次我重命名一个对象时,我都想知道是否有更好的方法。

假设我将一个我创建的对象大写并意识到我宁愿让它不大写:

# Create test data
X <- runif(100)
# Rename the object
x <- X
rm(X)

是否有一种单一命令的方式来做到这一点(这也避免了出于内存/速度原因的重新复制)?有几个命令名为 rename在各种包中,但它们都适用于列表中的元素,而不是列表(或其他对象)本身。

最佳答案

我不知道有什么内置的方法可以做到这一点,但您可以轻松编写自己的函数来执行这些操作。例如,这只是在没有任何检查以确保对象存在或是否已经存在一个名为您想要重命名的对象的情况下执行此操作。

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()
}

关于r - R 中是否有 "move"命令(相当于 <- 后跟 rm)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11475915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com