gpt4 book ai didi

r - 强制特定数据类型作为函数的参数

转载 作者:行者123 更新时间:2023-12-04 02:44:15 26 4
gpt4 key购买 nike

我只是想知道是否有办法强制函数只接受某些数据类型,而不必在函数中检查它;或者,这是不可能的,因为 R 的类型检查是在运行时完成的(而不是那些在编译期间进行类型检查的编程语言,例如 Java)?

例如,在 Java 中,您必须指定一种数据类型:

class t2 {
public int addone (int n) {
return n+1;
}
}

在 R 中,类似的函数可能是
addone <- function(n)
{
return(n+1)
}

但是如果提供了一个向量,则将(显然)返回一个向量。如果您只想接受单个整数,那么是在函数内设置条件的唯一方法,如下所示
addone <- function(n)
{
if(is.vector(n) && length(n)==1)
{
return(n+1)
} else
{
return ("You must enter a single integer")
}
}

谢谢,
克里斯

最佳答案

这完全可以使用 S3 类。您的示例在上下文或 R 中有些人为,因为我想不出为什么要创建一个具有单个值的类的实际原因。尽管如此,这是可能的。作为额外的奖励,我演示了如何使用 addone 函数将 1 的值添加到数字向量(平凡的)和字符向量(因此 A 变为 B 等):

首先为 addone 创建一个通用的 S3 方法,利用 S3 调度机制 UseMethod :

addone <- function(x){
UseMethod("addone", x)
}

接下来,创建人为的类 single , 定义为传递给它的任何内容的第一个元素:
as.single <- function(x){
ret <- unlist(x)[1]
class(ret) <- "single"
ret
}

现在创建处理各种类的方法。除非定义了特定的类,否则将调用默认方法:
addone.default <- function(x) x + 1
addone.character <- function(x)rawToChar(as.raw(as.numeric(charToRaw(x))+1))
addone.single <- function(x)x + 1

最后,使用一些示例数据对其进行测试:
addone(1:5)
[1] 2 3 4 5 6

addone(as.single(1:5))
[1] 2
attr(,"class")
[1] "single"

addone("abc")
[1] "bcd"

一些附加信息:
  • 哈德利的 devtools wiki是所有事物的宝贵信息来源,包括 the S3 object system .
  • S3 方法不提供严格的类型。它很容易被滥用。对于更严格的面向对象,请查看 S4 classes , reference based classesproto package用于 Prototype 基于对象的编程。
  • 关于r - 强制特定数据类型作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7139778/

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