r - R - 函数参数中的椭圆(`...`)和`NULL`
问题描述
预见
examplefn <- function(x = NULL, ...){str(x)}
我试图让这个函数尊重隐含的x = NULL
. 考虑以下:
对于同时使用这两种方法的调用x
,...
这会产生预期的结果:
> examplefn(1,2)
num 1
如果使用显式x = NULL
,则行为也符合预期:
> examplefn(x = NULL,2)
NULL
但是,当尝试(并期望x = NULL
从函数定义中使用 时,我得到:
> examplefn(2)
num 2
暗示,调用是按参数顺序评估的,而忽略了x = NULL
定义。
如何防止后者?
解决方案
x = NULL
仅当未提供值时才使用该定义x
。因此,当写入读取的内容examplefn(2)
时(参数编号 1 也是如此)以及结果。R
examplefn(x = 2)
x
如果你想规避这个问题,这里有一些方法:
1.通过创建两个函数
fun0 <- function (x, ...) str(x)
fun1 <- function (...) fun0(NULL, ...)
fun1(2)
# NULL
2.另一种方法是命名你的论点,例如
fun2 <- function (x = NULL, y) str(x)
fun2(y = 2)
# NULL
3.另一种方式,也许对您来说最方便,就是重新排列参数,见
fun3 <- function (..., x = NULL) str(x)
fun3(2)
# NULL
4.最后,这里还有一个(微不足道的)可能性——x <- NULL
在函数内部设置
fun4 <- function (...) {
x <- NULL
str(x)
}
fun4(2)
# NULL
但我假设你有理由想x
成为一个论点。
推荐阅读
- python - 如何检查点是否位于轮廓内?
- java - java - 如果操作系统被挂起,正在休眠的线程会发生什么?
- php - 如何使用 symfony 3.4 在服务中获取当前登录的用户
- specman - Specman e:有没有办法打印单元实例名称?
- javascript - 如何在 Firestore 中实现查找或创建模式
- google-cloud-platform - 工作浏览器证书控制对谷歌云的访问?
- php - PHP 上传文件并写入 TXT 文件
- c# - AspNetCore 2.1 Bearer Token Authentication - 当前用户为空
- ruby - 尝试在heroku中部署时出错
- reactjs - WebStorm 上的 %PUBLIC_URL% 编辑器警告