我是R的新手,并且使用一种名为“ show”的方法定义了一个对象。在这种方法中,我修改插槽的值,然后打印以显示其值。该值是正确的。
方法(显示)
setMethod("show", "menu", function(object){
while (TRUE){
#Clean console
cat("\014")
cat("COMPARATIVA ENTRE EQUIPOS DE LA MISMA COMPETICION\n")
cat("-------------------------------------------------\n\n")
cat("1. Comparativa entre clubes de Liga DIA\n")
cat("2. Comparativa entre clubes de Liga Femenina 2 - Grupo 'A'\n")
cat("3. Comparativa entre clubes de Liga Femenina 2 - Grupo 'B'\n")
cat("0. Salir\n\n")
option <- readline("Selecciona opción: ")
option <- suppressWarnings(as.numeric(option))
if (!is.na(option)){
if (option == 1){
object@competition <- 14
}
if (option == 2){
object@competition <- 22
}
if (option == 3){
object@competition <- 23
}
print(object@competition)
readline("Espera ...")
if (option == 0)
break
}else{
readline("No es un número. Pulsa una tecla para introducir otra opción.")
}
}
})
但是,如果我尝试使用此方法之外的位置访问广告位,那么我将获得初始值。
x <- menu(competition=0, stats=0)
x
print(x@competition)
当我调用“ x”时,我也调用了“ show”方法,在其中,我给“ competition”赋了一个不同于0的值。但是,稍后,当我尝试使用print(x @competition),结果为0。
> print(x@competition)
[1] 0
我想获得在“ show”方法中分配的值,但是在创建对象时已经得到了值。如何正确修改插槽的值?
答案 0 :(得分:1)
好的,以下几行对我有帮助:
myFun <- function(object) 0
setGeneric("myFun")
setClass("myClass", slots = c("competition", "stats"))
然后我继续执行您的代码(对setMethod
进行了一些修改):
setMethod("myFun", "myClass", function(object){
while (TRUE){
#Clean console
cat("\014")
cat("COMPARATIVA ENTRE EQUIPOS DE LA MISMA COMPETICION\n")
cat("-------------------------------------------------\n\n")
cat("1. Comparativa entre clubes de Liga DIA\n")
cat("2. Comparativa entre clubes de Liga Femenina 2 - Grupo 'A'\n")
cat("3. Comparativa entre clubes de Liga Femenina 2 - Grupo 'B'\n")
cat("0. Salir\n\n")
option <- readline("Selecciona opción: ")
option <- suppressWarnings(as.numeric(option))
if (!is.na(option)){
if (option == 1){
object@competition <- 14
break
}
if (option == 2){
object@competition <- 22
break
}
if (option == 3){
object@competition <- 23
break
}
print(object@competition)
readline("Espera ...")
if (option == 0)
break
}else{
readline("No es un número. Pulsa una tecla para introducir otra opción.")
}
}
return(object)
})
这是我的输出:
x <- new("myClass", competition = 0, stats = 0)
# printing just x yields:
An object of class "myClass"
Slot "competition":
[1] 0
Slot "stats":
[1] 0
# Here is what myFun(x) yields:
COMPARATIVA ENTRE EQUIPOS DE LA MISMA COMPETICION
-------------------------------------------------
1. Comparativa entre clubes de Liga DIA
2. Comparativa entre clubes de Liga Femenina 2 - Grupo 'A'
3. Comparativa entre clubes de Liga Femenina 2 - Grupo 'B'
0. Salir
Selecciona opción:
# hits 1
An object of class "myClass"
Slot "competition":
[1] 14
Slot "stats":
[1] 0
现在设置y <- myFun(x)
,我们获得(再次在控制台中点击1
):
> print(y@competition)
[1] 14