2013-03-15 6 views
4

R 함수 write.csv이 오류를 반환합니다. 여기 함수 write.csv가 오류를 반환합니다.

> VaRStats 
       A Index B Index  C Index 
Daily VaR  -0.65006 -0.50391  -0.5557 
Daily CVaR -0.75679 -0.57491 -0.65174 
5 Days VaR  -1.4204  -1.0077  -1.2269 

VaRStats의 클래스입니다 : 여기

내가 쓰고 싶은 data.frame의

> class(VaRStats) 
[1] "data.frame" 

그리고 여기 VaRStatsdput() 출력입니다 :

> dput(VaRStats) 
structure(list(`JWFXA Index` = structure(list(`NA` = -0.650061101980277, 
    `NA` = -0.756791819719978, `JWFXA Index` = -1.42035638029947), .Names = c(NA, 
NA, "JWFXA Index")), `CCYT1 Index` = structure(list(`NA` = -0.503912574910245, 
    `NA` = -0.574907003405759, `CCYT1 Index` = -1.00773735259718), .Names = c(NA, 
NA, "CCYT1 Index")), `FX Multistrategy Index` = structure(list(
    `NA` = -0.555699685451229, `NA` = -0.651738541799373, `FX Multistrategy Index` = -1.22688572580144), .Names = c(NA, 
NA, "FX Multistrategy Index"))), .Names = c("JWFXA Index", "CCYT1 Index", 
"FX Multistrategy Index"), row.names = c("Daily VaR", "Daily CVaR", 
"5 Days VaR"), class = "data.frame") 

을 통해 생성 된 오류기능

> write.csv(VaRStats, "SummaryStats.csv") 
Error in write.table(x, file, nrow(x), p, rnames, sep, eol, na, dec, as.integer(quote), : 
    type 'list' not implemented in 'EncodeElement' 

어떻게 가능합니까?

+1

작품 벌금을 변환 할 as.numeric를 사용하여 ...이 있어야합니다 당신이 제공하지 않는 누락 된 조각. –

+0

잘 작동합니다. 어쩌면 당신은 당신의'VaRStats' 객체에'dput'을 복사/붙여 넣을 수 있습니까? – juba

+0

최근 비슷한 기괴한 오류가있었습니다. 간단히 R – alexwhan

답변

6

: 당신과 함께 "정상"형식으로 다시 데이터 프레임을 변환 할 수있는 모든 당신이 열이 숫자 때문에

 write.csv(as.matrix(dd), "SummaryStats.csv") 

이 작동합니다.

read.csv("SummaryStats.csv") 
     X JWFXA.Index CCYT1.Index FX.Multistrategy.Index 
1 Daily VaR -0.6500611 -0.5039126    -0.5556997 
2 Daily CVaR -0.7567918 -0.5749070    -0.6517385 
3 5 Days VaR -1.4203564 -1.0077374    -1.2268857 

EDIT

이 용액 오른쪽이다. 당신이 중 하나의 문자열이있는 경우

목록 :

dd[1,1] <- 'a' 

as.matrix(dd) 
      JWFXA Index CCYT1 Index FX Multistrategy Index 
Daily VaR "a"   -0.5039126 -0.5556997    
Daily CVaR -0.7567918 -0.574907 -0.6517385    
5 Days VaR -1.420356 -1.007737 -1.226886 

하지만 실패하거나 적어도 나를 위해 NA에

sapply(dd, as.numeric) 
    JWFXA Index CCYT1 Index FX Multistrategy Index 
[1,]   NA -0.5039126    -0.5556997 
[2,] -0.7567918 -0.5749070    -0.6517385 
[3,] -1.4203564 -1.0077374    -1.2268857 
Warning message: 
+0

후속 조치가 중요합니다. – Arun

0

당신이 재현 예를 들어 줄 수있는, 내 생각 엔 당신이 당신이 원하는 모든 인수를 설정할 수 있도록도 write.table를 사용 row.namescol.names에 문제가 있다는 것입니다

편집 : 저도 같은 문제가 봐 str에 !!!

R) str(test) 
'data.frame': 3 obs. of 3 variables: 
$ JWFXA Index   :List of 3 
    ..$ NA   : num -0.65 
    ..$ NA   : num -0.757 
    ..$ JWFXA Index: num -1.42 
$ CCYT1 Index   :List of 3 
    ..$ NA   : num -0.504 
    ..$ NA   : num -0.575 
    ..$ CCYT1 Index: num -1.01 
$ FX Multistrategy Index:List of 3 
    ..$ NA     : num -0.556 
    ..$ NA     : num -0.652 
    ..$ FX Multistrategy Index: num -1.23 

데이터가

1

당신의 열이 나열되어 numeric 벡터에 각 목록을 캐스팅 lapply를 사용 data.frame

@juba 좋은 수정이있는 COMMUN 없습니다. 그들은 벡터이어야합니다. 이 시도.

VaRStats<-sapply(VaRStats,unlist) 
write.csv(VaRStats,file="...") 
+0

처음에는 실수로 lapply를 사용했지만 sapply로 바 꾸었습니다. – ndoogan

+0

(+1)'do.call (rbind, lapply (...))'(또는 다른 방법을 사용하면 cbind)을 사용할 수 있습니다. – Arun

4

설명되지 않은 이유로 데이터 프레임 열은 벡터가 아닌 목록입니다. 당신은 단순히이 작업을 수행 할 수 있습니다 여기에

df <- sapply(VaRStats, as.numeric) 
rownames(df) <- rownames(VarStats) 
write.csv(df, "yourfile.csv") 
+0

(+1)하지만 agstudy의 솔루션은 여기에서 훨씬 더 간단하다고 생각합니다. – Arun

+0

@Arun 동의합니다. upvote하고 agstudy의 대답을 수락하십시오! – juba

관련 문제