2012-07-25 2 views
4

가능한 중복 :
function with multiple outputs할당 출력

이 쉬운 질문처럼 보인다,하지만 난 그것을 알아낼 수 없습니다 나는 천국 ' 내가 본 R 매뉴얼에는 운이 없었다. dim(x)을 찾고 싶지만 dim(x)[1]adim(x)[2]부터 b까지 한 줄로 지정하고 싶습니다.

나는 [a b] <- dim(x)c(a, b) <- dim(x)을 시도했지만 어느 것도 효과가 없습니다. 이 일을 할 수있는 방법이 있습니까? 그것은 다루기 쉬운 매우 기본적인 것 같습니다.

+0

나는 그것이 속임수라는 것을 알고있다 :'tmp <- dim (x); a <- tmp [1]; b <- tmp [2]' – sgibb

+0

좋은 해결 방법 : D –

+2

[이 질문을보십시오] (http://stackoverflow.com/questions/1826519/function-returning-more-than-one-value) . 가장 짧은 대답은 아니오, R은 그렇게하지 않습니다. 긴 대답은 특정 유스 케이스에서 항상 작동 할 수 있다는 것입니다. 그러나 다른 많은 언어들처럼 "다중 할당"이 없습니다. – Justin

답변

0

이 당신이 원하는 한대로 솔루션의 간단되지 않을 수도 있습니다,하지만이 일을 가져옵니다 정말 그것을 처리 할 수있는 유일한 방법은 별도의 라인의 몇 가지를 추가하는 것입니다. 또한 앞으로 여러 변수를 한꺼번에 지정할 필요가 있고 (얼마나 많은 값을 가지고 있는지 모르기 때문에) 매우 유용한 도구입니다.

Output <- SomeFunction(x) 
VariablesList <- letters[1:length(Output)] 
for (i in seq(1, length(Output), by = 1)) { 
    assign(VariablesList[i], Output[i]) 
} 

루프는 R에서 가장 효율적인 것은 아니지만 여러 번 사용했습니다. 개인적으로 알 수없는 항목 수가있는 폴더에서 정보를 수집 할 때 특히 유용합니다.

EDIT :이 경우 Output은 임의의 길이가 될 수 있습니다 (VariablesList가 더 길면).

EDIT # 2 : Liz가 제안한 것처럼 더 많은 값을 허용하는 VariablesList 벡터를 변경했습니다.

+0

이것은 내 상황에서 가치가 없을지라도 출력물이 많으면 꽤 좋은 해결책입니다. 아마도 첫 번째 줄을'VariablesList <- letters [1 : length (Output)]'로 대체 할 것입니다. –

+0

좋은 생각, 나는 그것을 내 게시물에 추가했습니다. – MikeZ

-1

무엇이 ab에 있는지에 따라 다릅니다. 그들은 단지 경우 번호는이 같은 벡터를 반환하려고 :

dim <- function(x,y) 
    return(c(x,y)) 
dim(1,2)[1] 
# [1] 1 
dim(1,2)[2] 
# [1] 2 

만약 ab 뭔가 다른, 당신은 목록을 반환 할 수 있습니다

dim <- function(x,y) 
    return(list(item1=x:y,item2=(2*x):(2*y))) 
dim(1,2)[[1]] 
[1] 1 2 
dim(1,2)[[2]] 
[1] 2 3 4 

편집 :

이 시도 : x <- c(1,2); names(x) <- c("a","b")

+0

나는 당신이 제안하고있는 것에 대해 약간 혼란 스럽다. 'dim()'함수가 내장되어 있는데, 단지'dim()'를 호출 한 후에 그 지정을하지 않고 임의의 객체'a'와'b'에 치수를 할당하고자합니다. –

+0

제안 해 주셔서 감사합니다.)'는 출력의 열 이름에만 영향을줍니다. 이 줄을 실행 한 후에'a * 3'과 같은 것을 시도하면 오류가 발생합니다. 불행히도이 작업을 수행 할 수있는 기본 방법이 없다고 생각하고 있으므로 처리 할 여분의 행을 몇 개 추가해야합니다. –

0

이렇게하는 방법이없는 것처럼 보입니다.

temp <- dim(x) 
a <- temp[1] 
b <- temp[2] 
1

항상 세계를 만들 수있는 자신의 함수를 작성할 수도 있습니다 ab. 그러나 이것은 권장하지 않습니다 :

out <- dim(x) 

out[1] 

out[2] 
:

mydim <- function(x) { 
    out <- dim(x) 
    a <<- out[1] 
    b <<- out[2] 
} 

이 작업을 수행하는 "R"방법은 출력에 바로 그들에 액세스 않는 기능을 내장 필요에 따라 같은 목록 또는 벡터와 같은 결과입니다

R에는 많은 다른 언어가 부족한 우수한 목록 및 벡터 이해가 있으므로이 다중 할당 기능이 없습니다. 대신 루핑 구조없이 복잡한 데이터 구조에 접근 할 수있는 다양한 기능을 제공합니다.