具有函数参数的意外R行为

具有函数参数的意外R行为,r,function,parameters,R,Function,Parameters,我是新手。我编写了一个使用3个参数的函数。在我的代码中,我使用其中一个参数来帮助我从目录中读取文件。目录中有100个文件。当我传递所有函数参数并指定要读取的文件时,代码工作正常 functionX(var1, var2, id) and functionX(var1, var2, id = 1:100) ## Below is the first line of code for me that uses "id". sub.file.names <- file.names[id]

我是新手。我编写了一个使用3个参数的函数。在我的代码中,我使用其中一个参数来帮助我从目录中读取文件。目录中有100个文件。当我传递所有函数参数并指定要读取的文件时,代码工作正常

functionX(var1, var2, id) and functionX(var1, var2, id = 1:100)

## Below is the first line of code for me that uses "id".

sub.file.names  <- file.names[id]   ### Get file names

任何关于为什么会发生这种情况的指示都很高兴知道。我觉得答案是显而易见的,但我还没有弄明白

让我试着用一个简单的例子来解释发生了什么。考虑以下函数

foo = function(i){
  LETTERS[i]
}
当您尝试
foo()
时,您会注意到该函数返回所有26个大写字母。为什么会这样?R中的一切都是函数。所以当你说
字母[i]
时,你实际上是在调用函数
[

`[`(LETTERS, i)
由于缺少
i
,因此此调用将作为
[
(字母)(本质上是
字母[]
)执行,返回向量的所有元素。请注意,出现这种情况是因为
[
函数允许调用时缺少
i
参数。请检查
[

如果希望函数在缺少
id
时以不同的方式运行,请检查
missing(id)
,或者将其显式设置为默认值NULL。因此,如果您这样做

foo2 = function(i = NULL){
  LETTERS[i]
}

<代码> Foo2>(<代码>)将返回一个零长度字符向量。

让我尝试用一个简单的例子来解释发生了什么。考虑下面的函数< /P>

foo = function(i){
  LETTERS[i]
}
当您尝试
foo()
时,您会注意到该函数返回所有26个大写字母。为什么会发生这种情况?好吧,R中的所有内容都是一个函数。因此,当您说
字母[i]
时,您实际上是在调用函数
[
。因此,函数调用是

`[`(LETTERS, i)
由于缺少
i
,因此此调用将作为
[
(字母)(本质上是
字母[]
)执行,返回向量的所有元素。请注意,出现这种情况是因为
[
函数允许调用时缺少
i
参数。请检查
[

如果希望函数在缺少
id
时以不同的方式运行,请检查
missing(id)
,或者将其显式设置为默认值NULL。因此,如果您这样做

foo2 = function(i = NULL){
  LETTERS[i]
}

foo2()
将返回长度为零的字符向量。

可能
if(missing(id))执行某些操作
`您可能需要提供所执行操作的更多详细信息-是否定义了
functionX()
的两个版本?如果是,第二个版本将覆盖第一个版本。可能
if(missing(id))做点什么
`您可能需要提供您所做工作的更多细节-您是否定义了两个版本的
functionX()
?如果是这样,第二个将覆盖第一个。dang,快告诉我:-)Thx Ramnath-很好的解释和可靠的示例。我也很感激你添加了关于如果我想要不同的行为,显式设置NULL的部分。dang,快告诉我:-)Thx Ramnath-很好的解释和可靠的示例。我也很感激你如果我想要不同的行为,那么我将使用NULL显式设置这一部分。