gpt4 book ai didi

r - 了解 R 中的 switch() 函数?

转载 作者:行者123 更新时间:2023-12-04 18:15:29 33 4
gpt4 key购买 nike

由 Venables 和 Ripley 编写的“统计与计算”一书有一个示例,说明在通用群函数 Math 的“多项式”类的对象上定义方法函数。数学是一个组函数,包含一些组件函数,包括 abs、acos、acosh、...

下面是书中提到的为组泛型函数Math定义方法函数的代码(注意代码是针对S4类(新式R/S类)):

setMethod("Math", "polynomial", 
function(x) {
switch(.Generic, ceiling = , floor = ,
trunc = polynomial(callGeneric(x@coef), rat = x@rat),
stop(paste(.Generic, "not allowed on polynomials"))
)}
)

我知道使用 setMethod() 我们正在为通用函数 Math 定义一个方法函数,当它在“多项式”类的对象上调用时。你能解释一下 switch 在这里做什么吗?我阅读了有关开关的 R 帮助,但仍然难以理解以下部分:
 switch(.Generic, ceiling = , floor = , 
trunc = polynomial(callGeneric(x@coef), rat = x@rat),
stop(paste(.Generic, "not allowed on polynomials"))
)}

请注意,上面的多项式函数是一个构造函数,用于创建“多项式”类的对象。

最佳答案

我认为使用代码可以提供丰富的信息(我即将传播的这种理解完全来自我刚刚观察到的内容;我什至不知道您可以以这种方式使用 switch):

您的代码经过调整以在函数之外运行:

test <- "ceiling"
test <- "floor"
test <- "trunc"

switch(test,
ceiling = ,
floor = ,
trunc = mean(1:10),
stop(paste(test, "not allowed on polynomials"))
)

尝试每个测试条件,您会看到如果天花板、地板或 trunc 它返回什么 trunc = .如果你把东西放在地板上:
test <- "floor"

switch(test,
ceiling = ,
floor = 5,
trunc = mean(1:10),
stop(paste(test, "not allowed on polynomials"))
)

你会得到不同的回应。

我可能错了,但我认为这可能是这样写的:
if (.Generic %in% c(ceiling, "floor", "trunc"){
polynomial(callGeneric(x@coef), rat = x@rat)
} else {
stop(paste(.Generic, "not allowed on polynomials"))
}

对这种解释是否正确但不熟悉此特定上下文感兴趣。

关于r - 了解 R 中的 switch() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11831321/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com