2011-11-15 29 views
5

Tôi muốn tìm một tập hợp các chức năng và lưu chúng, bởi vì tôi muốn gửi chúng đến một máy chủ từ xa trong một tập tin Rdata, và tôi không muốn cài đặt một gói mới trên máy chủ.Làm thế nào để tìm kiếm một môi trường bằng cách sử dụng ls() bên trong một hàm?

Mặc dù tôi gặp lỗi khi sử dụng cách tiếp cận bên dưới, các phương pháp tiếp cận dễ dàng/tốt hơn được hoan nghênh.

MWe:

Dưới đây là hai chức năng giả:

abcd.fun.1 <- function() return(1) 
abcd.fun.2 <- function() return(2) 

tôi có thể xác định các chức năng giả:

ls()[grep('abcd', ls())] 

Nhưng khi tôi quấn này trong một hàm:

find.test <- function(x) { 
    return(ls()[grep(x, ls())]) 
} 
find.test('abcd') 

Chức năng trả character(0)

Cuối cùng tôi muốn

save(find.test('abcd'), file = test.Rdata) 

Trả lời

9
  1. Tại sao không dùng tham số pattern= để ls?
  2. Gọi hàm ls bên trong hàm liệt kê các đối tượng tồn tại trong phạm vi chức năng , không môi trường toàn cầu (điều này được giải thích trong ?ls).

Nếu bạn muốn liệt kê các đối tượng trong môi trường toàn cục từ một hàm, hãy chỉ định envir=.GlobalEnv.

x <- 1:10 
f <- function() ls() 
g <- function() ls(envir=.GlobalEnv) 
h <- function() ls(envir=.GlobalEnv, pattern="[fg]") 
f() 
# character(0) 
g() 
# [1] "f" "g" "h" "x" 
h() 
# [1] "f" "g" 
+0

globalenv() được ưu tiên những ngày này – hadley

+0

@hadley: bạn có thể giải thích lý do không? –

+0

Hmmm, tôi có thể thề rằng nó đã được đề xuất trong tài liệu nhưng tôi đoán là không. Trong trường hợp đó nó chỉ là ý kiến ​​cá nhân: Tôi nghĩ rằng nó đẹp hơn để sử dụng một chức năng hơn toàn cầu. – hadley

7

Bạn cần cho biết chức năng của mình để liệt kê các đối tượng trong môi trường khác với chính nó, ví dụ: môi trường toàn cầu. (Và trong khi bạn đang ở đó, bạn cũng có thể chỉ định các mẫu biểu thức chính là một cuộc tranh cãi để ls.):

find.test <- function(x, envir=.GlobalEnv) { 
    ls(pattern=x, envir=envir) 
} 

Xem ?ls để biết thêm về ls()?environment cho các tùy chọn khác để xác định môi trường.

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