如何在函数内使用 ls() 搜索环境?

发布于 2024-12-15 10:50:03 字数 585 浏览 1 评论 0原文

我想找到一组函数并保存它们,因为我想将它们以 Rdata 文件发送到远程服务器,并且我不想在服务器上安装新的包。

尽管我使用下面的方法遇到错误,但欢迎更简单/更好的方法。

MWE:

这里有两个虚拟函数:

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

我可以识别虚拟函数:

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

但是当我将其包装在函数中时:

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

该函数返回character(0)

最终我想

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

I want to find a set of functions and save them, because I want to send them to a remote server in an Rdata file, and I don't want to install a new package on the server.

Although I am getting an error using the approach below, easier / better approaches are welcome.

MWE:

Here are two dummy functions:

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

I can identify the dummy functions:

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

But when I wrap this in a function:

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

The function returns character(0)

Ultimately I would like to

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

独行侠 2024-12-22 10:50:03
  1. 为什么不使用 lspattern= 参数?
  2. 在函数内调用 ls 会列出该函数中存在的对象
    函数作用域,不是全局环境(这在 ?ls 中进行了解释)。

如果您想从函数中列出全局环境中的对象,请指定 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"
  1. Why not use the pattern= argument to ls?
  2. Calling ls inside a function lists the objects that exist within the
    function scope, not the global environment (this is explained in ?ls).

If you want to list the objects in the global environment from a function, specify 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"
傾城如夢未必闌珊 2024-12-22 10:50:03

您需要告诉您的函数列出其自身以外的环境中的对象,例如全局环境。 (同时,您还可以将正则表达式模式指定为 ls 的参数。):

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

有关 ls( 的更多信息,请参阅 ?ls )?environment 用于指定环境的其他选项。

You need to tell your function to list objects in an environment other than itself, e.g. the global environment. (And while you're at it, you can also specify the regex pattern as an argument to ls.):

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

See ?ls for more info about ls() and ?environment for other options to specify the environment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文