我不知道是否可能......
我会保存文件,以便在以后的其他会话中导入它。
我想将这个data.frame保存在csv文件中(它是包含向量的列表列表):
> operacions<-list(list(Nom="Victor",Bolis= c("Negro","azul","verde")),list(Nom="Dani",Lapices=c(1:4)))
> operacions
[[1]]
[[1]]$Nom
[1] "Victor"
[[1]]$Bolis
[1] "Negro" "azul" "verde"
[[2]]
[[2]]$Nom
[1] "Dani"
[[2]]$Lapices
[1] 1 2 3 4
但它给了我一个错误:
> write.csv2(operacions, "file.csv",row.names = FALSE)
Error in data.frame(list(Nom = "Victor", Bolis = c("Negro", "azul", "verde" :
arguments imply differing number of rows: 3, 4
答案 0 :(得分:2)
由于它不是data.frame,更具体地说不能用as.data.frame强制转换为该消息的来源,因此您需要考虑另一种保存数据的方法。可能最简单的是dput
,它写了列表结构的ASCII表示:
dput(operacions, file="out.txt")
把它带回R:
new <- source("out.txt")
另一种方法是转换为JSON格式,这也可以保留键值信息,而不仅仅是写入值:
library(jsonlite)
toJSON(new)
# value---------
{"value":[{"Nom":["Victor"],"Bolis":["Negro","azul","verde"]},{"Nom":["Dani"],"Lapices":[1,2,3,4]}],"visible":[true]}
您可以使用cat函数将其指向文本文件:
cat( toJSON(new), file="test.3.txt")
答案 1 :(得分:0)
R数据框和R列表可能不兼容......
列表本质上是一个向量,其中每个元素可以是不同类型和长度的元素。同时,数据框可以被认为是统一的电子表格,其中每列可以存储不同类型的数据,或者非结果列表 ,其中每个元素具有相同的长度 。最后一点很重要,因为列表可以具有不相等的长度,而数据帧则不具有。
因此,使用saveRDS()
将列表另存为RDS文件可能更容易dataDir <- "."
saveRDS( operacions, file.path(dataDir, "files"))
operacions2 <- readRDS(file.path(dataDir, "files"))
这会将其保存为R-Object,同样,稍后还原R对象。
如果您想转换为数据框,可以先转换为嵌套数据框,然后填写数据框中的空白。因此...
require(data.table)
require(plyr)
operacions<-list(list(Nom="Victor",Bolis= c("Negro","azul","verde")),list(Nom="Dani",Lapices=c(1:4)))
str(operacions)
operacionsdf <- lapply(operacions, data.frame, stringsAsFactors = FALSE)
str(operacionsdf)
operacionsdf2 <- rbind.fill(operacionsdf)
str(operacionsdf2)
write.csv2(operacionsdf2, "file.csv",row.names = FALSE)
operacionsdf3 <- read.csv2("file.csv")
str(operacionsdf3)
输出:
> require(data.table)
> require(plyr)
> operacions<-list(list(Nom="Victor",Bolis= c("Negro","azul","verde")),list(Nom="Dani",Lapices=c(1:4)))
> str(operacions)
List of 2
$ :List of 2
..$ Nom : chr "Victor"
..$ Bolis: chr [1:3] "Negro" "azul" "verde"
$ :List of 2
..$ Nom : chr "Dani"
..$ Lapices: int [1:4] 1 2 3 4
> operacionsdf <- lapply(operacions, data.frame, stringsAsFactors = FALSE)
> str(operacionsdf)
List of 2
$ :'data.frame': 3 obs. of 2 variables:
..$ Nom : chr [1:3] "Victor" "Victor" "Victor"
..$ Bolis: chr [1:3] "Negro" "azul" "verde"
$ :'data.frame': 4 obs. of 2 variables:
..$ Nom : chr [1:4] "Dani" "Dani" "Dani" "Dani"
..$ Lapices: int [1:4] 1 2 3 4
> operacionsdf2 <- rbind.fill(operacionsdf)
> str(operacionsdf2)
'data.frame': 7 obs. of 3 variables:
$ Nom : chr "Victor" "Victor" "Victor" "Dani" ...
$ Bolis : chr "Negro" "azul" "verde" NA ...
$ Lapices: int NA NA NA 1 2 3 4
> write.csv2(operacionsdf2, "file.csv",row.names = FALSE)
> operacionsdf3 <- read.csv2("file.csv")
> str(operacionsdf3)
'data.frame': 7 obs. of 3 variables:
$ Nom : Factor w/ 2 levels "Dani","Victor": 2 2 2 1 1 1 1
$ Bolis : Factor w/ 3 levels "azul","Negro",..: 2 1 3 NA NA NA NA
$ Lapices: int NA NA NA 1 2 3 4