2011-11-29 32 views
90

Tôi đã tải trong một loại bàn điều khiển R khác nhau của các đối tượng. tôi có thể loại bỏ tất cả chúng sử dụngxóa tất cả các biến ngoại trừ chức năng

rm(list=ls()) 

hoặc loại bỏ chỉ các chức năng (nhưng không phải là biến) sử dụng

rm(list=lsf.str()) 

Câu hỏi của tôi là: là có một cách để loại bỏ tất cả các biến ngoại trừ chức năng

Trả lời

102

Dưới đây là một lớp lót loại bỏ tất cả các đối tượng ngoại trừ chức năng:

rm(list = setdiff(ls(), lsf.str())) 

Nó sử dụng setdiff để tìm các tập hợp con của các đối tượng trong môi trường toàn cầu (như trả về bởi ls()) mà không có chế độ function (như trả về bởi lsf.str())

+5

Nếu bạn cũng muốn loại bỏ đối tượng có tên bắt đầu bằng một giai đoạn, sử dụng này để thay thế: 'rm (list = setdiff (ls (all.names = TRUE), lsf.str (all.names = TRUE))) ' –

+1

Cảm ơn rất nhiều vì câu trả lời này. Tôi có thể biết khoảng thời gian là gì không? – RockScience

+1

Chắc chắn. Một khoảng thời gian (bằng tiếng Anh Mỹ) là một tên khác cho một dấu chấm, như thế này: '.' Để xem những gì tôi đang nói, hãy thử' .j <- 5; ls(); ls (all.names = TRUE) ' –

7

Các posted setdiff Câu trả lời là tốt đẹp. Tôi chỉ nghĩ rằng tôi sẽ gửi chức năng liên quan này tôi đã viết một thời gian trở lại. Tính hữu ích của nó là tùy thuộc vào người đọc :-).

lstype<-function(type='closure'){ 
    inlist<-ls(.GlobalEnv) 
    if (type=='function') type <-'closure' 
    typelist<-sapply(sapply(inlist,get),typeof) 
    return(names(typelist[typelist==type])) 
} 
+1

Cảm ơn bạn đã đăng bài đó. Nó làm cho một so sánh thú vị với mã cho 'ls.str()', tuy nhiên, kiểm tra 'chế độ' thay vì' typeof' của các đối tượng. (Trên một mặt lưu ý, tôi sẽ darned nếu tôi có thể tìm sự khác biệt giữa hai từ tài liệu của họ). –

+0

Tôi luôn sử dụng lớp thay vì typeof – RockScience

0

Đây là một chức năng khá tiện lợi mà tôi đã chọn ở đâu đó và điều chỉnh một chút. Có thể được tốt đẹp để giữ trong thư mục.

list.objects <- function(env = .GlobalEnv) 
{ 
    if(!is.environment(env)){ 
     env <- deparse(substitute(env)) 
     stop(sprintf('"%s" must be an environment', env)) 
    } 
    obj.type <- function(x) class(get(x, envir = env)) 
    foo <- sapply(ls(envir = env), obj.type) 
    object.name <- names(foo) 
    names(foo) <- seq(length(foo)) 
    dd <- data.frame(CLASS = foo, OBJECT = object.name, 
        stringsAsFactors = FALSE) 
    dd[order(dd$CLASS),] 
} 

> x <- 1:5 
> d <- data.frame(x) 
> list.objects() 
#  CLASS  OBJECT 
# 1 data.frame   d 
# 2 function list.objects 
# 3 integer   x 
> list.objects(env = x) 
# Error in list.objects(env = x) : "x" must be an environment 
+0

@MatthewLundberg, ý tưởng hay. Tôi đã cập nhật. –

0

Bạn có thể sử dụng lệnh sau để xóa TẤT CẢ biến. Hãy cẩn thận vì bạn không thể lấy lại các biến của bạn.

rm(list=ls(all=TRUE)) 
+0

Điều cần biết nhưng đó không phải là câu hỏi – RockScience

+0

Tôi đoán tôi nên để lại đó như một bình luận vì nó đã được nhiều hơn một FYI. Lấy làm tiếc. – lwileczek

Các vấn đề liên quan