Написать функции для методов в Rstudio - PullRequest
0 голосов
/ 17 ноября 2018

Я хотел бы попросить вас о помощи.Фактически, я сейчас пытаюсь создать пакет для имитации прокручивания объекта и создания функций для этого.Точнее, я создал функцию прокрутки, которая принимает в качестве аргумента устройство, а также количество раз, чтобы выполнить прокрутку устройства.

             object <- roll(die, times = 100)
             oject[10]

Я получаю 10-й бросок.

Кроме того, я хотел бы также функцию, которая позволила бы мне заменить данный бросок.Скажите «<-», чтобы </p>

        object <- roll(two_side_die, times = 100)
        object[10] <- "head"

заменил 10-й бросок на голову.

И, наконец, метод сложения, позволяющий получить

        roll(die, times= 300) 

например,

          roll(die, times = 100) + 200

Большое спасибо !!

1 Ответ

0 голосов
/ 17 ноября 2018

Поскольку вы уже используете некоторую диспетчеризацию метода S3 с class(obj) <- "class", вы должны иметь возможность:

`[.rolls` <- function(obj, ind) obj$rolls[ind]
`[<-.rolls` <- function(obj, ind, value) { obj[["rolls"]][ind] <- value; obj; }

Некоторые поддельные данные:

foo <- list(rolls=10L+1:5, sides=6, probs = 1/6)
class(foo) <- "rolls"
foo[3]
# [1] 13
foo[3] <- 99L
foo
# $rolls
# [1] 11 12 99 14 15
# $sides
# [1] 6
# $probs
# [1] 0.1666667
# attr(,"class")
# [1] "rolls"

Вы можете зайти так далеко, чтобы красиво распечатать объект, хотя он имеет только интерактивное использование:

print.rolls <- function(x, ...) {
  cat("<Rolls>\n")
  cat("  len: ", length(x[["rolls"]]), "\n")
  cat("  other properties: ", paste(sort(setdiff(names(x), "rolls")), collapse = ", "), "\n")
}
foo
# <Rolls>
#   len:  5 
#   other properties:  probs, sides 
...