1
我是一位流利的,長期的R用戶,我開始熟悉類和方法。我對這一點仍然很陌生,並且通過概念工作。R S4應用於類中對象列表的方法
具體而言,今天我試圖將一個方法應用於一個對象列表,所有對象都在特定的用戶生成的類中。
拿這個例子:在cars[[1]]
#define car
setClass("car",
representation(
name = "character",
mpg = "numeric"
)
)
#create some cars
cars <- lapply(1:nrow(mtcars), function(x) new("car", name =
rownames(mtcars)[x], mpg = mtcars$mpg[x]))
##SAMPLE MPG GROWTH METHOD
setGeneric("grow.mpg", function(car) {
standardGeneric("grow.mpg")
})
setMethod("grow.mpg",
signature("car"),
function(car){
old_mpg <- [email protected]
[email protected] <- [email protected] * .1 + [email protected]
message(paste("growing mpg on ", [email protected], " from ", old_mpg, " to
", [email protected], sep = ''))
return(car)
})
#APPLY METHOD
cars[[1]] <- grow.mpg(cars[[1]])
growing mpg on Mazda RX4 from 25.41 to 27.951
這成功地增長MPG 10%:
cars[[1]]
An object of class "car"
Slot "name":
[1] "Mazda RX4"
Slot "mpg":
[1] 27.951
但是應用方法grow.mpg
所有的cars
引發以下錯誤:
cars <- grow.mpg(cars)
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘grow.mpg’ for
signature ‘"list"’
所以有兩個問題:
- 這是爲什麼?
- 如何將
grow.mpg
應用於cars
?
在此先感謝!
當你深入一個新的概念時,忽略簡單的事情是多麼容易。我很感激幫助。 –