2011-06-21 43 views
31

Cho một chức năng, làm cách nào để bạn xác định không gian tên mà nó đến từ đâu?Làm thế nào để bạn xác định không gian tên của một hàm?

Ví dụ: nếu tôi nhập mean.default tại dấu nhắc lệnh, đầu ra bao gồm thực tế là nó nằm trong gói cơ sở. Tôi muốn có thể làm một cái gì đó như getNamespace(mean.default) và có nó trở lại "cơ sở" (hoặc môi trường cơ sở thực tế).

Có chức năng getNamespace nhưng dường như chỉ chấp nhận tên gói thay vì tên hàm.

print.function sử dụng mã nội bộ để truy xuất không gian tên. Tôi đã duyệt web theo số do_printfunction trong src/main/print.c nhưng sau đó đã từ bỏ.

+0

Ba câu trả lời xuất sắc; cảm ơn tất cả. Tough để lựa chọn giữa họ vì tất cả họ đều làm việc, vì vậy tôi sẽ đi với cuộc bỏ phiếu phổ biến. –

Trả lời

32

Tôi gần đây đã tìm hiểu về find() mà dường như chỉ làm việc này.

R> find("ls") 
[1] "package:base" 
R> find("na.locf") 
[1] "package:zoo" 
13

findFunction là một tùy chọn và ?findFunction nói rằng bạn nên sử dụng nó thay vì find với mode="function". Kết quả của findFunction là danh sách (các) môi trường nơi các phiên bản có thể nhìn thấy của hàm được đặt.

11

Bạn muốn getNamespaceName + environment:

getNamespaceName(environment(mean.default)) 
# [1] "base" 
+1

Với đầu vào ký tự: 'getNamespaceName (môi trường (get (" mean.default ")))'. –

1

chức năng này tìm kiếm chức năng trong không gian tên nạp và môi trường toàn cầu:

getEnvName <- function(f) { 
    attached <- c(environmentName(.GlobalEnv), loadedNamespaces()) 
    envs <- c(.GlobalEnv, lapply(attached[-1], .getNamespace)) 
    attached[vapply(envs, function(env) exists(f, env, inherits = FALSE), logical(1))] 
} 
median <- function() {} 
getEnvName("median") 
#> [1] "R_GlobalEnv" "stats" 
getEnvName(".try_quietly") 
#> [1] "tools" 
getEnvName("getEnvName") 
#> [1] "R_GlobalEnv" 
Các vấn đề liên quan