Câu trả lời:
Đây là một cấu trúc đơn giản sẽ làm điều đó, bằng cách sử dụng setdiff
:
rm(list=setdiff(ls(), "x"))
Và một ví dụ đầy đủ. Chạy điều này có nguy cơ của riêng bạn - nó sẽ loại bỏ tất cả các biến ngoại trừ x
:
x <- 1
y <- 2
z <- 3
ls()
[1] "x" "y" "z"
rm(list=setdiff(ls(), "x"))
ls()
[1] "x"
Sử dụng keep
chức năng từ gdata
gói khá tiện lợi.
> ls()
[1] "a" "b" "c"
library(gdata)
> keep(a) #shows you which variables will be removed
[1] "b" "c"
> keep(a, sure = TRUE) # setting sure to TRUE removes variables b and c
> ls()
[1] "a"
Tôi nghĩ một tùy chọn khác là mở không gian làm việc trong RStudio và sau đó thay đổi danh sách thành lưới ở phía trên bên phải của môi trường (hình ảnh bên dưới). Sau đó đánh dấu vào các đối tượng bạn muốn xóa và cuối cùng nhấp vào xóa.
Tôi chỉ mất vài giờ để tìm câu trả lời cho một câu hỏi tương tự nhưng hơi khác - tôi cần có thể xóa tất cả các đối tượng trong R (bao gồm các hàm) ngoại trừ một số vectơ.
Một cách để làm điều này:
rm(list=ls()[! ls() %in% c("a","c")])
Trong đó các vectơ mà tôi muốn giữ được đặt tên là 'a' và 'c'.
Hy vọng điều này sẽ giúp bất cứ ai tìm kiếm cùng một giải pháp!
rm(list=setdiff(ls(), c("a", "c")))
, phải không? Xem câu trả lời của @ Andrie.
Để giữ tất cả các đối tượng có tên khớp với một mẫu, bạn có thể sử dụng grep
, như vậy:
to.remove <- ls()
to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
rm(list=to.remove)
Thay thế v
bằng tên của đối tượng bạn muốn giữ
rm(list=(ls()[ls()!="v"]))
hat-tip: http://r.789695.n4.nabble.com/Removing-objects-and-clear-memory-tp3445763p3445865.html
Điều này đem đến ls()
's pattern
tùy chọn, trong trường hợp bạn có rất nhiều đối tượng với cùng một khuôn mẫu mà bạn không muốn giữ:
> foo1 <- "junk"; foo2 <- "rubbish"; foo3 <- "trash"; x <- "gold"
> ls()
[1] "foo1" "foo2" "foo3" "x"
> # Let's check first what we want to remove
> ls(pattern = "foo")
[1] "foo1" "foo2" "foo3"
> rm(list = ls(pattern = "foo"))
> ls()
[1] "x"
rm
chức năng nên luôn luôn được sử dụng một cách cẩn thận (hơn nữa trong phần vỏ!). Xem chỉnh sửa của tôi để có câu trả lời cho câu hỏi của bạn.
require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()
Hãy nghĩ theo cách khác, nếu chúng ta muốn xóa một nhóm thì sao? thử cái này,
rm(list=ls()[grep("xxx",ls())])
Cá nhân tôi không thích quá nhiều bảng, biến trên màn hình, nhưng tôi không thể tránh sử dụng chúng. Vì vậy, tôi đặt tên cho những thứ tạm thời bắt đầu bằng "xxx", vì vậy tôi có thể loại bỏ chúng sau khi nó không còn được sử dụng.
Từ trong một hàm, rm tất cả các đối tượng trong .GlobalEnv ngoại trừ hàm
initialize <- function(country.name) {
if (length(setdiff(ls(pos = .GlobalEnv), "initialize")) > 0) {
rm(list=setdiff(ls(pos = .GlobalEnv), "initialize"), pos = .GlobalEnv)
}
}
Sau đây sẽ xóa tất cả các đối tượng khỏi bảng điều khiển của bạn
rm(list = ls())