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
これが正常燃費が10%で成長する:
この例を見てみましょう
cars <- grow.mpg(cars)
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘grow.mpg’ for
signature ‘"list"’
:
cars[[1]]
An object of class "car"
Slot "name":
[1] "Mazda RX4"
Slot "mpg":
[1] 27.951
しかしcars
のすべてに方法grow.mpg
を適用するには、次のエラーがスローされます
2つの質問:
- なぜですか?
grow.mpg
をcars
にすべて適用するにはどうすればよいですか?
ありがとうございます!
あなたが新しいコンセプトに徹底しているときに、簡単なことを見落とすことは簡単です。私は助けに感謝します。 –