5

R関数write.csvはエラーを返します。

これが私が書きたいdata.frameです:

> 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

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

そして、これが次のdput()出力ですVaRStats

> 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関数を介して生成されたエラー

> 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'

そんなことがあるものか?

4

6 に答える 6

8

ここでは、これを簡単に行うことができます:

      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

編集

このソリューションは正しいものです。

リストの1つに文字列がある場合:

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 

しかし、を使用するas.numericと失敗するか、少なくとも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:
于 2013-03-15T14:06:01.007 に答える
4

説明できない理由により、データフレームの列はリストであり、ベクトルではありません。次のコマンドを使用して、データフレームを「通常の」形式に戻すことができます。

df <- sapply(VaRStats, as.numeric)
rownames(df) <- rownames(VarStats)
write.csv(df, "yourfile.csv")
于 2013-03-15T14:05:09.833 に答える
1

あなたの列はリストです。それらはベクトルでなければなりません。これを試して。

VaRStats<-sapply(VaRStats,unlist)
write.csv(VaRStats,file="...")
于 2013-03-15T14:03:26.893 に答える
0

再現可能な例を挙げていただけますか。私の推測では、とに問題があると思いますrow.names。また、必要に応じてすべての引数を設定できるようにcol.names使用してください。write.table

編集:私は同じ問題を見てください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

あなたのデータはコミュンではありませんdata.frame

@jubaには適切な修正があり、lapply各リストをnumericベクトルにキャストするために使用します

于 2013-03-15T13:56:55.433 に答える
0

各列の変数タイプを確認してみてください。Write csvは、タイプリストの列を好みません。

たとえば、starwarsデータセットでは、フィルム、車両、宇宙船の列のタイプは次のとおりです。

> data(starwars)
> class(starwars$vehicles)
[1] "list"
> class(starwars$starships)
[1] "list"
> class(starwars$films)
[1] "list"
于 2018-07-25T23:32:27.513 に答える
0

これを使ってみてください

df <- do.call(rbind.data.frame, VaRStats)

write.csv(df, "path\VaRStats.csv")

最初の行はリストからデータフレームに変換され、次にcsvファイルにエクスポートできます

于 2020-06-11T01:49:44.310 に答える