2016-08-02 2 views
1

data.tree 패키지의 설명서를 살펴 보았습니다. 그러나 내가 만든 data.tree 구조를 저장하는 방법을 찾지 못했습니다. 다른 구조 (예 : data.frame)로 변환하지 않고 data.tree 구조를 작성한 다음 저장하는 방법이 있습니까?R에 data.tree를 저장하는 방법?

+0

@ Hack-R 그래서 CSV로 저장 하시겠습니까? –

+0

괜찮아요. 두 답을 모두 고맙기 때문에 공평하게 대답해야합니다. 답을 고르려면 주사위를 굴리고 승자는 @Vandenman입니다. –

+0

그 점에 대해 걱정할 필요는 없지만, Hadley Wickham과 같은 R 전문가는 .RData보다는 .RDS 파일로 저장하는 것이 계산 상으로 빠르고 안정적이며 더 효율적이라고 말합니다. –

답변

1

당신이 말하는 어떤 유형의 객체인지 전혀 알 수 없기 때문에 귀하의 질문이 다소 모호합니다. 그러나 이것은 나를 위해 작동하는 것 같습니다.

data("acme") 
a = acme 
class(a) 
[1] "Node" "R6" 

x = tempdir() 
setwd(tempdir()) 
save(a, file = 'test.Rdata') 
rm(a) 
load('test.Rdata') 
a 
+0

오 오케이, thnx, 특별한 방법이 있다고 생각했습니다. –

+1

이렇게 저장하면 문제가 없습니다. 그러나 각 노드는 환경이므로 저장된 객체는 매우 커지는 경향이 있습니다. 이유에 대한 설명은 여기를 참조하십시오. http://stackoverflow.com/questions/13912867/empty-r-environment-becomes-large-file-when-saved. 너무 귀찮 으면 저장하기 전에 목록 (예 :'as.list') 또는 data.frame으로 변환 한 다음로드 한 후 (as.Node를 사용하여) 다시 변환 할 수 있습니다. –

+0

@ChristophGlur는 좋은 지적입니다! 26000 + 노드의 내 data.tree 객체는 방대한 크기 때문에 RData 파일로 저장할 수 없습니다. 그냥 개체를 저장하기 위해 앞뒤로 변환하는 데 매우 느린 것 같습니다! –

1
data(acme) 
print(acme) 
acme$fieldsAll 
acme$count 
acme$totalCount 
acme$isRoot 
acme$height 
print(acme, "p", "cost") 

outsource <- acme$IT$Outsource 
class(outsource) 
print(outsource) 
outsource$fields 
outsource$isLeaf 
outsource$level 
outsource$path 
outsource$p 
outsource$parent$name 
outsource$root$name 
outsource$expCost <- outsource$p * outsource$cost 
print(acme, "expCost") 

acme$Get("p") 
acme$Do(function(x) x$expCost <- x$p * x$cost) 
acme$Get("expCost", filterFun = isLeaf) 

ToDataFrameTable(acme, "name", "p", "cost", "level", "pathString") 
ToDataFrameTree(acme, "name", "p", "cost", "level") 
ToDataFrameNetwork(acme, "p", "cost") 

tree <- ToDataFrameTree(acme, "name", "p", "cost", "level") 
saveRDS(tree, "tree.RDS") 

it_works <- readRDS("tree.RDS") 
it_works 
      levelName      name p cost level 
1 Acme Inc.          Acme Inc. NA  NA  1 
2 ¦--Accounting         Accounting NA  NA  2 
3 ¦ ¦--New Software       New Software 0.50 1000000  3 
4 ¦ °--New Accounting Standards New Accounting Standards 0.75 500000  3 
5 ¦--Research          Research NA  NA  2 
6 ¦ ¦--New Product Line     New Product Line 0.25 2000000  3 
7 ¦ °--New Labs         New Labs 0.90 750000  3 
8 °--IT             IT NA  NA  2 
9  ¦--Outsource        Outsource 0.20 400000  3 
10  ¦--Go agile         Go agile 0.05 250000  3 
11  °--Switch to R       Switch to R 1.00 50000  3 
> 
+1

오케이, 설명서에서 "저장"또는 "쓰기"를 검색해도 아무 것도 찾을 수 없지만 지금은 나에게 의미가 있습니다. –

+0

@PhilipC. 물론, np. 이제 다행입니다. –

1

이 관련 질문에 대한 답변입니다 : 어떻게 다른 객체로 data.tree을 저장합니까?

여러 가지 방법으로 원본 data.tree를 변경하기 때문에 이것은 매우 중요합니다.

# What one would expect 
myDataTree_clone <- myDataTree 

"복제본"을 변경하면 실제로 myDataTree 개체도 변경됩니다.

# What one should do instead 
myDataTree_clone <- Clone(myDataTree) 

이제 원래 myDataTree 객체를 변경하지 않고 복제 작업 할 수 있습니다.