具有函数参数的意外R行为
我是新手。我编写了一个使用3个参数的函数。在我的代码中,我使用其中一个参数来帮助我从目录中读取文件。目录中有100个文件。当我传递所有函数参数并指定要读取的文件时,代码工作正常具有函数参数的意外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]
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显式设置这一部分。