2011-11-21 3 views
16

출력 방법이 있습니까? 예 : 2 개체를 사용하지 않고 list()?함수에서 여러 출력을 할당하는 방법은 무엇입니까?

my.fun=function(vector, index) 
     { 
     a=fun.a(vector, index) 
     b=fun.b(vector, index) 
     output=list(a,b) 
     } 

또는 개체 2 목록을 출력 하시겠습니까?

 c=fun.a(vector, index) 
     d=fun.b(vector, index) 

을 그리고 list(a,b)과 같은 기능에 대한 또 다른 list(c,d)를 원 : 나는 또한있을 수 있음을 고려.

이것은 찾고자하는 것에 대한 작은 예제 일뿐입니다. 내 기능은 대형 개체에 적용되고 목록으로 내 보냅니다.하지만 중간 계산도 내보내고 싶습니다. 하나의 옵션은 모두 같은 목록에 병합하는 것이지만, 다른 해결책이 있는지 알고 싶습니다.

+1

그것은이 요청 된 후이 중복 질문 1 년입니다 결정했다? –

+1

개인적으로 가져 가야 할 필요는 없습니다. StackOverflow에는 많은 중복이 있으며, 중복을 표시하면 사이트를보다 깨끗하게 유지하고 관련 질문을 참조 할 수 있습니다. 많은 복제본이 있고 모든 복제본의 검토에 시간이 오래 걸릴 수 있으므로 항상 즉시 닫히는 것은 아닙니다. – MByD

+1

답장을 보내 주셔서 감사합니다. @BinyaminSharet –

답변

6

; 나를 들어, env 매개 변수에 제공하는 것을 가장 까다로운 비트를 일하고 :

f=function(){ 
    list(a=1,b="my string") 
} 

ret=f() 
list2env(ret,env=environment()) 
#a=ret$a;b=ret$b #Same as previous line 

print(a);print(b) #1 and "my string" 
+0

'environment()'를 사용하거나 사용하지 않을 수도 있습니다. 이 경우 Global Environment를 반환하지만 현재의 평가 환경이기 때문에 가능합니다. –

+0

@ JoshuaUlrich가 작성한 것을 확장하려면 environment()가 현재 범위 (즉, 지역 변수가 저장되는 곳)를 제공합니다. 이것은 결국 가장 도움이 된 SO 답변입니다. http://stackoverflow.com/a/8773047/841830 –

3

난 당신이 목록을 사용하여 제한됩니다 생각하지만, 당신이 그들을 좋아 결합 할 수 있습니다 :

> list(list(a=1, b=2), list(c=3, d=4)) 
[[1]] 
[[1]]$a 
[1] 1 

[[1]]$b 
[1] 2 


[[2]] 
[[2]]$c 
[1] 3 

[[2]]$d 
[1] 4 
3

반환() 객체는 한 가지 ... 목록 또는 벡터 할 필요가있다. 전역 (또는 다른 환경)으로 다른 "푸시"뭔가 당신이 사용할 수있는하려면 "< < -"또는 평가 같은 (..., envir = .GlobalEnv)

9

할 수 있습니다 만 return 하나의 객체에 함수. 그러나 다른 옵션이 있습니다. 전역 환경에 중간 객체를 할당 할 수 있습니다 (아무 것도 덮어 쓰지 않도록주의해야합니다). 또는 함수에 환경을 전달하고 객체를 할당 할 수 있습니다. 여기

는 후자의 제안의 예 : 나는 당신이 설명하는지에 대한 list2env 이상적인 발견

fun <- function(x, env) { 
    env$x2 <- x^2 
    x^3 
} 
set.seed(21) 
x <- rnorm(10) 
myEnv <- new.env() 
fun(x, myEnv) 
# [1] 4.987021e-01 1.424421e-01 5.324742e+00 -2.054855e+00 1.061014e+01 
# [6] 8.125632e-02 -3.871369e+00 -8.171530e-01 2.559674e-04 -1.370917e-08 
myEnv$x2 
# [1] 6.288699e-01 2.727464e-01 3.049292e+00 1.616296e+00 4.828521e+00 
# [6] 1.876023e-01 2.465527e+00 8.740486e-01 4.031405e-03 5.728058e-06 
+0

+1 처음에 "내 대답 이었군."라고 생각한 후 내 버전보다 훨씬 구조적으로 잘 생각했습니다. –

+0

@DWin : 네, 제 글을 쓰고있는 동안 당신의 답을 보았습니다. 그러나 다른 사람들이 똑같은 것을 다른 방식으로 설명하는 것을 듣는 것이 도움이 될 수 있다고 생각했습니다. –

관련 문제