【发布时间】:2019-04-20 04:22:13
【问题描述】:
我想寻求您的帮助。事实上,我目前正在尝试创建一个包来模拟滚动对象并创建函数来这样做。更准确地说,我创建了 roll 函数,它接受一个设备的参数以及滚动设备的次数。
roll <- function(device=device(), times=1 ) {
if (class(device) != "device") {
stop("the object must be of class device")
}
check_times(x=times)
rolls <- sample(device$sides, size=times,
replace= TRUE, prob= device$prob)
obj <- list(rolls= rolls, sides = device$sides,
prob= device$prob, total= times)
class(obj) <- "rolls"
print.rolls(obj)
}
我实际上想创建一个提取函数,如果我这样做了
object <- roll(die, times = 100)
oject[10]
我得到了第 10 卷。
此外,我还想要一个可以让我替换给定卷的功能。说“
object <- roll(two_side_die, times = 100)
object[10] <- "head"
用头替换第 10 卷。
最后,一个能得到的加法方法
roll(die, times= 300)
通过做例子
roll(die, times = 100) + 200
非常感谢!!
【问题讨论】:
-
编写函数
`[.rolls` <- function(obj, ind) {...}和`[.rolls<-` <- function(obj, ind, newval) {...}(有意使用嵌入的反引号)。函数中的obj将是问题中的object,ind将是 10,newval将是"head"。从那里开始,您应该能够按照您的预期进行操作。只需确保这些函数返回新对象即可。为了好玩,您还可以重载print.rolls <- function(x, ...) {...},如果您希望它在控制台上以特定方式显示。 -
您好,非常感谢!您是否有机会提供一个链接,我可以在其中找到有关
[.rolls写作结构的更多解释。它实际上适用于第一个括号函数,但不适用于数组函数。当我写的时候,[.rolls<- <- function(x, ind, z) { x$rolls[ind] <- 'z' }它没有考虑到变化。 (我使用了嵌入的反引号) -
来自我之前的评论:“只要确保这些函数返回新对象”。你不是。如果您查看
x$rolls[ind] <- 'z'时实际返回的内容,问题就很明显了。该赋值操作的返回值就是被赋值的值,即'z'。如果你改为使用{ x$rolls[ind] <- 'z'; x;},你应该得到你想要的。 -
看我的回答...我把函数名的部分颠倒了,对不起。
-
可能还早,但由于您是新来的,这也适用于您的某些previous questions:如果答案解决了您的问题,请accept it;这样做不仅为回答者提供了一些积分,而且还为有类似问题的读者提供了一些关闭。尽管您只能接受一个答案,但您可以选择对您认为有帮助的人进行投票。 (如果仍有问题,您可能需要编辑您的问题并提供更多详细信息。)
标签: r function package extension-methods