“插槽不存在”错误消息是什么意思?
What does the “slot doesn't exist” error message mean?
我正在尝试编写一个对象并访问他的参数。我有两个文件,menus.R
,我在其中定义对象,main.R
,我在其中使用对象并尝试访问插槽(参数)。
两个文件的代码如下:
menus.R
menu <- setClass("menu", slots=list(competition="numeric", stats="numeric"))
setMethod("show", "menu", function(object){
while (TRUE){
#Clean console
cat("4")
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
}
readline("Espera ...")
if (option == 0)
break
}else{
readline("No es un número. Pulsa una tecla para introducir otra opción.")
}
}
})
main.R
menu(competition=0, stats=0)
print(menu@competition)
getClass(class(menu))
当我调用 menu(competition=0, stats=0)
时,我可以看到方法 show
给我的是什么。这是对的。在 show
方法中,我为 competition
赋值。当我从 show
方法退出时,下一条指令是 print(menu@competition)
,这是我遇到此错误的地方:
Error in print(menu@competition) : there is no a slot with name
"competition" for this object class "classGeneratorFunction"
然后使用 getClass(class(menu)) 我得到了这个:
我做错了什么?我怎样才能访问 competition
或 stats
?
您混淆了对象构造函数和对象本身。
menu(competition = 0, stats=0)
为您生成了一个 class menu
的新对象,但您无法将其保存在某处,因此它会打印在屏幕上。因此,您的第一个正确输出。
但是,你想要操纵对象。但是你没有保存它!相反,您尝试操纵 "object factory"、menu()
。 "object factory"的类型是classGeneratorFunction
,这就是你看到的。
这应该有效:
myMenuObject <- menu(competition=0, stats=0)
print(myMenuObject)
print(myMenuObject@competition)
getClass(class(myMenuObject))
我正在尝试编写一个对象并访问他的参数。我有两个文件,menus.R
,我在其中定义对象,main.R
,我在其中使用对象并尝试访问插槽(参数)。
两个文件的代码如下:
menus.R
menu <- setClass("menu", slots=list(competition="numeric", stats="numeric"))
setMethod("show", "menu", function(object){
while (TRUE){
#Clean console
cat("4")
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
}
readline("Espera ...")
if (option == 0)
break
}else{
readline("No es un número. Pulsa una tecla para introducir otra opción.")
}
}
})
main.R
menu(competition=0, stats=0)
print(menu@competition)
getClass(class(menu))
当我调用 menu(competition=0, stats=0)
时,我可以看到方法 show
给我的是什么。这是对的。在 show
方法中,我为 competition
赋值。当我从 show
方法退出时,下一条指令是 print(menu@competition)
,这是我遇到此错误的地方:
Error in print(menu@competition) : there is no a slot with name "competition" for this object class "classGeneratorFunction"
然后使用 getClass(class(menu)) 我得到了这个:
我做错了什么?我怎样才能访问 competition
或 stats
?
您混淆了对象构造函数和对象本身。
menu(competition = 0, stats=0)
为您生成了一个 class menu
的新对象,但您无法将其保存在某处,因此它会打印在屏幕上。因此,您的第一个正确输出。
但是,你想要操纵对象。但是你没有保存它!相反,您尝试操纵 "object factory"、menu()
。 "object factory"的类型是classGeneratorFunction
,这就是你看到的。
这应该有效:
myMenuObject <- menu(competition=0, stats=0)
print(myMenuObject)
print(myMenuObject@competition)
getClass(class(myMenuObject))