Tôi đọc this basic question về cách đổi tên đối tượng và câu trả lời của @Shane cho nó, chỉ cho tôi đánh giá lười biếng. Bây giờ tôi tự hỏi nếu assign
được đánh giá lười biếng, quá. Cũng giống như ở đây:Đánh giá lười biếng trong R - được chỉ định bị ảnh hưởng?
assign("someNewName",someOldObject)
rm(someOldObject)
Lý do tại sao tôi tự hỏi về việc này là các trường hợp sử dụng như sau: Giả sử tôi có 10K + R đối tượng mỗi trong số đó có hai thuộc tính gọi là originalName
và additionalName
. Bây giờ tôi muốn viết một hàm có hiệu quả có thể cho phép người dùng chuyển từ tên này sang tên khác mà không làm mất hai thuộc tính này. Gần giống như thế này ...
EDIT: dựa trên @ Hadley, tôi đã thay đổi mã của mình.
switchObjectName <- function(x) {
n1 <- attributes(x)$originalName
n2 <- attributes(x)$additionalName
objName <- deparse(substitute(x))
if(objName == n1) {
delayedAssign(n2,x,assign.env=.GlobalEnv)
} else {
delayedAssign(n1,x,assign.env=.GlobalEnv)
}
rm(list=c(objName),envir=.GlobalEnv)
}
hoạt động tốt, nhưng tôi đã gặp một số rắc rối khi nhận được tuyên bố rm
. Tôi đã thử rm(objName,envir=.GlobalEnv)
nhưng không thể làm cho nó hoạt động mặc dù objName chắc chắn là một nhân vật gây ra nó là kết quả của deparse(substitute(x)
.
Nếu tôi hiểu chính xác câu hỏi của bạn, hãy xem phần 'delayAssign', https://github.com/hadley/pryr/blob/master/R/assign-delayed.r và phần "Chuyển nhượng: tên liên kết với giá trị" trên https://github.com/hadley/devtools/wiki/environments – hadley
cảm ơn một lần nữa. đặc biệt là con trỏ đến chương trong wiki của bạn đã giúp rất nhiều điều để hiểu những gì đang diễn ra. 'delayAssign' là gợi ý đúng. –