将参数传递给函数

Mir*_*rko 4 arguments r

将参数传递给R中的函数我有一个理解问题.

在以下示例中,我按名称从命名列表中检索值.当我直接执行它时,它返回值.但是当我将相同的代码放入函数时,它返回NULL.这里发生了什么?

提前谢谢,Mirko

namedlist <- list(a=c("50", "80"), b=c("50")) 

namedlist$a
# returns: [1] "50" "80"

myfunction <- function(arg){ namedlist$arg }
myfunction(a)
# returns: NULL
Run Code Online (Sandbox Code Playgroud)

Rei*_*son 7

你在请求:

namedlist$arg

当然,没有名称"arg"中的组件namedlist,因此返回值NULL.

这种类型的子集列表将起作用:

myfunction <- function(arg) {
    namedlist[[arg]]
}
Run Code Online (Sandbox Code Playgroud)

并返回与namedlist $ a相同的内容,但您需要将组件名称作为字符串传递:

> namedlist$a
[1] "50" "80"
> myfunction(a)
Error in myfunction(a) : object 'a' not found
> myfunction("a")
[1] "50" "80"
Run Code Online (Sandbox Code Playgroud)

  • @Mirko另外,你在这里依靠范围界定在全局工作空间中找到一些东西.编写`myfunction`以使其自包含并传入作为参数所需的所有对象将是更好的做法.`myfunction < - function(list,arg)`并且具有以下函数体`list [[arg]]`,并通过`myfunction(namedlist,"a")调用它. (2认同)