ฉันมีพื้นที่ทำงานที่มีวัตถุจำนวนมากและฉันต้องการที่จะลบทั้งหมดยกเว้นหนึ่ง rm(obj.1, obj.2... obj.n)
นึกคิดฉันต้องการที่จะหลีกเลี่ยงการประเภท เป็นไปได้ที่จะระบุ remove all objects but these ones
?
ฉันมีพื้นที่ทำงานที่มีวัตถุจำนวนมากและฉันต้องการที่จะลบทั้งหมดยกเว้นหนึ่ง rm(obj.1, obj.2... obj.n)
นึกคิดฉันต้องการที่จะหลีกเลี่ยงการประเภท เป็นไปได้ที่จะระบุ remove all objects but these ones
?
คำตอบ:
นี่คือโครงสร้างอย่างง่ายที่จะทำโดยใช้setdiff
:
rm(list=setdiff(ls(), "x"))
และเป็นตัวอย่างที่สมบูรณ์ ดำเนินการด้วยความเสี่ยงของคุณเองซึ่งจะลบตัวแปรทั้งหมดยกเว้นx
:
x <- 1
y <- 2
z <- 3
ls()
[1] "x" "y" "z"
rm(list=setdiff(ls(), "x"))
ls()
[1] "x"
การใช้keep
ฟังก์ชั่นจากgdata
แพ็คเกจค่อนข้างสะดวก
> 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"
ฉันคิดว่าตัวเลือกอื่นคือการเปิดพื้นที่ทำงานใน RStudio แล้วเปลี่ยนรายการเป็นกริดที่มุมขวาบนของสภาพแวดล้อม (ภาพด้านล่าง) จากนั้นทำเครื่องหมายวัตถุที่คุณต้องการล้างแล้วคลิกสุดท้ายเพื่อล้าง
ฉันใช้เวลาหลายชั่วโมงในการหาคำตอบของคำถามที่คล้ายกัน แต่แตกต่างกันเล็กน้อย - ฉันต้องสามารถลบวัตถุทั้งหมดใน R (รวมถึงฟังก์ชั่น) ยกเว้นเวกเตอร์จำนวนหนึ่ง
วิธีหนึ่งในการทำสิ่งนี้:
rm(list=ls()[! ls() %in% c("a","c")])
ที่เวกเตอร์ที่ฉันต้องการเก็บไว้มีชื่อว่า 'a' และ 'c'
หวังว่านี่จะช่วยให้ทุกคนค้นหาโซลูชันเดียวกัน!
rm(list=setdiff(ls(), c("a", "c")))
จริงไหม ดูคำตอบของ @ Andrie
เพื่อให้วัตถุทั้งหมดที่มีชื่อตรงกับรูปแบบคุณสามารถใช้grep
เช่น:
to.remove <- ls()
to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
rm(list=to.remove)
แทนที่v
ด้วยชื่อของวัตถุที่คุณต้องการเก็บ
rm(list=(ls()[ls()!="v"]))
หมวกเคล็ดลับ: http://r.789695.n4.nabble.com/Removing-objects-and-clearing-memory-tp3445763p3445865.html
นี้ใช้ประโยชน์จากls()
ของpattern
ตัวเลือกในกรณีที่คุณมีจำนวนมากของวัตถุที่มีรูปแบบเดียวกันกับที่คุณไม่ต้องการที่จะเก็บ:
> 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
ควรใช้ฟังก์ชั่นนี้ด้วยความระมัดระวังเสมอไป ดูการแก้ไขของฉันสำหรับคำตอบสำหรับคำถามของคุณ
ลองคิดแบบอื่นถ้าเราต้องการลบกลุ่ม? ลองนี้
rm(list=ls()[grep("xxx",ls())])
โดยส่วนตัวฉันไม่ชอบตารางตัวแปรบนหน้าจอมากเกินไป แต่ฉันไม่สามารถหลีกเลี่ยงได้ ดังนั้นฉันตั้งชื่อสิ่งชั่วคราวที่เริ่มต้นด้วย "xxx" ดังนั้นฉันสามารถลบออกได้หลังจากที่ไม่ได้ใช้อีกต่อไป
จากภายในฟังก์ชั่น rm วัตถุทั้งหมดใน. GlobalEnv ยกเว้นฟังก์ชั่น
initialize <- function(country.name) {
if (length(setdiff(ls(pos = .GlobalEnv), "initialize")) > 0) {
rm(list=setdiff(ls(pos = .GlobalEnv), "initialize"), pos = .GlobalEnv)
}
}
เพื่อเก็บรายการไฟล์หนึ่งสามารถใช้:
rm(list=setdiff(ls(), c("df1", "df2")))
แล้วเรื่องนี้ล่ะ
# Removes all objects except the specified & the function itself.
rme <- function(except=NULL){
except = ifelse(is.character(except), except, deparse(substitute(except)))
rm(list=setdiff(ls(envir=.GlobalEnv), c(except,"rme")), envir=.GlobalEnv)
}
สมมติว่าคุณต้องการลบทุกวัตถุยกเว้น df จากสภาพแวดล้อม:
rm(list = ls(pattern="[^df]"))
# remove all objects but selected
rm(list = ls()[which("key_function" != ls())])
ต่อไปนี้จะลบวัตถุทั้งหมดออกจากคอนโซลของคุณ
rm(list = ls())