R 함수에서 여러 객체 반환하기
이 질문에는 이미 답변이 있습니다.
R 함수에서 여러 객체를 어떻게 반환합니까? 자바에서 나는 어쩌면 클래스, 만들 것 Person
몇 가지 개인 변수와 캡슐화, 어쩌면,이 height
, age
등
그러나 R에서는 데이터 그룹을 전달해야합니다. 예를 들어 R 함수가 문자 목록과 정수를 모두 반환하도록하려면 어떻게해야합니까?
다른 많은 언어와 달리 R 함수는 엄격한 의미에서 여러 객체를 반환하지 않습니다. 이를 처리하는 가장 일반적인 방법은 list
객체 를 반환하는 것입니다. 따라서 함수에 정수 foo
와 문자열 벡터 가있는 경우 bar
다음 항목을 결합하는 목록을 만들 수 있습니다.
foo <- 12
bar <- c("a", "b", "e")
newList <- list("integer" = foo, "names" = bar)
그런 다음 return
이 목록.
함수를 호출 한 후 newList$integer
또는로 각각에 액세스 할 수 있습니다 newList$names
.
다른 객체 유형은 다양한 목적으로 더 잘 작동 할 수 있지만 list
객체를 시작하는 것이 좋습니다.
Java에서와 마찬가지로 R에서 정보를 캡슐화하는 S4 클래스를 작성할 수 있습니다.
setClass(Class="Person",
representation(
height="numeric",
age="numeric"
)
)
그러면 함수는이 클래스의 인스턴스를 반환 할 수 있습니다.
myFunction = function(age=28, height=176){
return(new("Person",
age=age,
height=height))
}
정보에 액세스 할 수 있습니다.
aPerson = myFunction()
aPerson@age
aPerson@height
이 라인을 따라 무언가를 찾고 있습니까?
x1 = function(x){
mu = mean(x)
l1 = list(s1=table(x),std=sd(x))
return(list(l1,mu))
}
library(Ecdat)
data(Fair)
x1(Fair$age)
수퍼 할당을 사용할 수도 있습니다.
"<-"유형 대신 "<<-". 함수는 해당 이름의 오브젝트에 대해 하나의 기능 레벨을 반복적으로 반복적으로 검색합니다. 찾을 수 없으면 글로벌 수준에서 하나를 만듭니다.
당신은 사용할 수 for()
와 함께 assign()
많은 개체를 만들 수 있습니다. 의 예를 참조하십시오 assign()
:
for(i in 1:6) { #-- Create objects 'r.1', 'r.2', ... 'r.6' --
nam <- paste("r", i, sep = ".")
assign(nam, 1:i)
새로운 물건을보고
ls(pattern = "^r..$")
이를 처리하는 한 가지 방법은 정보를 기본 속성에 속성으로 넣는 것입니다. 나는 강조해야한다. 나는 이것이 두 정보가 서로 관련되어 하나의 정보가 다른 경우에만 적절한 조치라고 생각한다.
예를 들어, 때때로 "중요한 변수"의 이름 또는 변수 이름 목록을 데이터 프레임에 속성으로 저장하여 크게 수정 된 변수를 숨 깁니다.
attr(my.DF, 'Modified.Variables') <- DVs.For.Analysis$Names.of.Modified.Vars
return(my.DF)
이를 통해 데이터 프레임 자체와 함께 변수 이름 목록을 저장할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/8936099/returning-multiple-objects-in-an-r-function
'development' 카테고리의 다른 글
VIM의 실행 취소 트리는 어떻게 사용됩니까? (0) | 2020.07.05 |
---|---|
노드에서 전역 모듈을 가져 오려면 어떻게합니까? (0) | 2020.07.05 |
String # equals와 String # contentEquals 메소드의 차이점 (0) | 2020.07.05 |
jQuery에서 여러 클래스 추가 및 제거 (0) | 2020.07.05 |
(유니 코드 오류) 'unicodeescape'코덱이 위치 2-3의 바이트를 디코딩 할 수 없습니다 : 잘린 \ UXXXXXXXX 이스케이프 (0) | 2020.07.05 |