2010-06-22 8 views
5

객체로 돌려 목록 항목 :R : 이런 내가 수동으로 만든 개체의 목록을

rand1 <- rnorm(1e3) 
rand2 <- rnorm(1e6) 

myObjects <- NULL 
myObjects[[1]] <-rand1 
myObjects[[2]] <-rand2 
names(myObjects) <- c("rand1","rand2") 

나는 개체를 번들하고 S3에서 그들을두고 일부 코드에서 일하고 있어요 . 그런 다음 EC2에서 myObjects 목록을 가져 와서 자동으로 '묶음을 풀기'라는 코드가 있습니다. 이 예제에서는 목록에 두 개의 객체 만 있고 이름은 알려져 있지만 길이와 이름의 목록을 처리하기 위해이 코드를 어떻게 작성합니까?

#pseudo code 
for each thing in myObjects 
    thing <- myObjects[[thing]] 

꽤 이름 (myObjects)을 가지고하는 방법을 알아낼 [1] 내가 myObjects의 내용 [[1]]를 할당하는 오브젝트의 이름으로 바꿀 수 없습니다. 루핑을 처리 할 수 ​​있지만 각 개체를 만드는 것은 내가 매달아 있습니다. 나는 이것이 아주 간단하다고 확신하지만, 나는 그것을 아주 천천히 다룰 수 없다.

+0

관련성 : http : // stack overflow.com/questions/2590043/creating-a-series-of-vectors-from-a-vector, http://stackoverflow.com/questions/2679193/how-to-name-variables-on-the-fly- in-r, http://stackoverflow.com/questions/2899581/assign-subset-of-parent-table-to-objects-in-r, http://stackoverflow.com/questions/2907896/how-to- 변수에 값을 할당하는 성격을 부여하는 것 – Marek

+1

링크 Marek에 감사드립니다. 이것은 검색을위한 '구석 솔루션'이됩니다. 일단 내가 원하는 것을 수행하는 기능을 알게되면 관련 질문을 찾는 것이 훨씬 쉬워집니다. 정말 어려운 부분은 문제에 대한 간단한 설명만으로 어떻게 그곳에 도달 할 수 있는지를 알아내는 것입니다. –

답변

10

당신은 assign 사용할 수 있습니다

for(i in 1:length(myObjects)) assign(names(myObjects)[i], myObjects[[i]]) 
+0

assign() ... 내가 놓친 조각입니다! 저와 Richie 모두에게 올바른 방향으로 나를 가르쳐 주셔서 감사합니다. –

+3

'length (myObjects) == 0' 인 경우'seq_along (myObjects)'가 조금 더 안전합니다. – hadley

+0

@hadley : 감사합니다! seq_along()은 훌륭한 찾기입니다. 다음 예제와 같이 : bad ='for (i in 1 : length (NULL)) print (i)', good ='for (i seq_along (NULL)) print (i)' – Shane

5

셰인의 답변을 확장하려면 :

mapply(assign, names(myObjects), myObjects, MoreArgs=list(envir = globalenv()) 

이 (당신은 다른 환경에 globalenv()을 변경하실 수 있습니다.)

+0

환경 변화에 대한 좋은 아이디어 . 나는 그것을 사용해야한다. 그것은 보너스 아이디어입니다! –

+0

이 예제에서는 rand1 및 rand2 객체가 생성 된 것을 볼 수 있지만 myObjects 객체도 출력하는 것으로 보입니다. 이 mapply() 결과를 객체에 할당하면 myObjects PLUS rand1 및 rand2 사본으로 끝납니다. 다소 시끄럽고 비효율적 인 것처럼 보입니다. 이것이 다른 취향의 적용이어야 하는가? –

6

attach(myObjects)

+2

대부분의 사람들이이 코드를 사용하는 방식이 추적하기 어려운 다소 시시한 코드를 생성한다는 것을 발견했기 때문에 나는 기본적으로 attach()를 사용했다. 그래서 나는이 경우에 그것을 사용할 생각조차하지 않았다. 그러나 지금 당신이 그것을 말하면서, 나는 그것이 정말로 좋은 해결책이라고 생각합니다. 내 작은 상자 밖에서 생각하도록 도와 주셔서 감사합니다. –

+0

+1 그 사용법도 고려하지 않았습니다. – Shane

+2

첨부 파일을 사용하는 것이 좋습니다. 그러나 만약 당신이 그것을 사용하려고한다면 그것을 사용하십시오. 당신 자신의 버전을 쓰지 마십시오. – hadley

관련 문제