函数write.csv返回一个错误
R函数函数write.csv返回一个错误,r,csv,R,Csv,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 下面是VaRStat
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)
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")
下面是VaRStats
的dput()
输出:
> class(VaRStats)
[1] "data.frame"
> 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'
这怎么可能呢?你能给出一个可重复的例子吗,我猜你对
行名和列名有问题,也可以使用写.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
您的数据不是Commondata.frame
@juba有一个很好的解决方案,使用lappy
将每个列表转换为数值
向量您的列就是列表。它们应该是向量。试试这个
VaRStats<-sapply(VaRStats,unlist)
write.csv(VaRStats,file="...")
VaRStats由于无法解释的原因,您的数据帧列是列表,而不是向量。您可以使用以下方法将数据帧转换回“正常”格式:
df <- sapply(VaRStats, as.numeric)
rownames(df) <- rownames(VarStats)
write.csv(df, "yourfile.csv")
df在这里,您可以简单地执行以下操作:
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
编辑
这个解决方案是正确的
如果其中一个列表中有字符串:
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
尝试检查每个列的变量类型。Write csv不喜欢列表类型的列
例如,在《星球大战》数据集中,列films、vehicles和starships的类型为list:
> data(starwars)
> class(starwars$vehicles)
[1] "list"
> class(starwars$starships)
[1] "list"
> class(starwars$films)
[1] "list"
试试这个
df <- do.call(rbind.data.frame, VaRStats)
write.csv(df, "path\VaRStats.csv")
df对我来说很好。。。一定有一件你没有提供的东西丢失了。在这里也很好。也许你可以在你的VaRStats
对象上复制/粘贴一个dput
?我最近也有一个类似的奇怪错误-它是通过简单地重新启动Rlapply(VaRStats,class)修复的,这表明你的列是列表。这可能就是问题所在。您拥有的结构实际上不是data.frame。它刚刚被分配了类“data.frame”。正如恩多根所说,你的列是列表而不是数字。您可以通过执行sum(VaRStats)来很容易地看到这一点,因为它不起作用。最初错误地在这里使用lapply,但将其更改为sapply。(+1)您可以使用do.call(rbind,lappy(…)
(或者cbind,如果它给出了另一种方法)。(+1)但我认为agstudy的解决方案在这里更简单。@Arun我同意您的看法。请投票并接受agstudy的答案!很好(而且很重要)的跟进!