Loại bỏ nhiều đối tượng với rm ()


84

Bộ nhớ của tôi đang bị tắc nghẽn bởi một loạt các tệp trung gian (gọi chúng là temp1, temp2, v.v.). Có thể xóa chúng khỏi bộ nhớ mà không cần thực hiện rm(temp1), rm(temp2)từng cái một không? Tôi đã thử rm(list(temp1, temp2, etc.)), nhưng điều đó dường như không hiệu quả.

Câu trả lời:


123

Đặt danh sách thành một vectơ ký tự (không phải vectơ tên)

rm(list = c('temp1','temp2'))

hoặc là

rm(temp1, temp2)

3
Để xóa mọi thứ trong bộ nhớ, bạn có thể nói: rm (list = ls ())
Sam

5
@Sam rm(list = ls(all = TRUE))nếu bạn muốn chắc chắn nhận được mọi thứ.
Dason

1
Nó có hoạt động trong %>%không? Chẳng hạn nhưlist(...) %>% rm(list = .)
Jiaxiang

Bạn vui lòng giải thích lợi thế của nó là listgì? Đối với tôi, có vẻ phức tạp không cần thiết khi nhập tất cả các tên biến thay vì chỉ tự động hoàn thành TAB trong tùy chọn thứ hai.
laviex

112

Một giải pháp khác rm(list=ls(pattern="temp")), loại bỏ tất cả các đối tượng phù hợp với mẫu.


Được mô tả ở đây bởi Josh Paulson (Tôi không biết điều gì ls(...)đã làm, nhưng bây giờ tôi đoán nó giống như hàm Unix bash ls?) - rất tiếc, Josh Paulson đã sử dụng một loại cụ thể được mô tả bởi @SamTo remove everything in the memory, you can say: rm(list = ls())
The Red Pea

Điều này hoạt động tốt nhưng có thể có một lỗi nhỏ. Nếu có một đối tượng có tên 'ABCtemp', nó cũng sẽ bị xóa. Làm cách nào để tôi có thể loại bỏ những đối tượng bắt đầu bằng 'tạm thời' và giữ nguyên 'ABCtemp'?
user3768495

8
Bạn chỉ cần thêm nhiều tiêu chí hơn vào mẫu của mình. Ví dụ của bạn, pattern="^temp"sẽ chỉ bắt biến bắt đầu bằng "temp", vì vậy không bắt biến ABCtemp.
Alan

1
Một khả năng khác là câu trả lời được đưa ra bởi @BrodieG tại đây stackoverflow.com/questions/21677923/…
diod màu xanh lá cây

3

Hoặc sử dụng biểu thức chính quy

"rmlike" <- function(...) {
  names <- sapply(
    match.call(expand.dots = FALSE)$..., as.character)
  names = paste(names,collapse="|")
  Vars <- ls(1)
  r <- Vars[grep(paste("^(",names,").*",sep=""),Vars)]
  rm(list=r,pos=1)
}

rmlike(temp)

3

Một biến thể khác mà bạn có thể thử là (mở rộng câu trả lời của @ mnel) nếu bạn có nhiều tạm thời.

ở đây "n" có thể là số biến tạm thời có mặt

rm(list = c(paste("temp",c(1:n),sep="")))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.