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 <- 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
을 적용하는 다음과 같은 오류가 발생합니다
그래서 두 가지 질문 :
- 왜인가요?
grow.mpg
을 모두cars
에 어떻게 적용합니까?
미리 감사드립니다.
아, 새로운 개념에 깊이 들어가면 간단한 것을 간과하는 것이 얼마나 쉬운가요? 도움에 감사드립니다. –