development

R 함수에서 여러 객체 반환하기

big-blog 2020. 7. 5. 07:40
반응형

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

반응형