R中的CSV输出包括引号和额外字符

R中的CSV输出包括引号和额外字符,r,R,我在R中有一个很长的列表(“mylist”),其中包含要导出为.csv的字符序列,每个单元格包含1个字符: > str(mylist) List of 1 $ :List of 259 ..$ : chr [1:214] "A" "B" "C" "D" ... ..$ : chr [1:220] "E" "F" "G" "H" ... 当我在上面使用write.csv时,我得到一个错误,因为列表包含不同数量的行。好的所以我试着: mynewlist<-do.call("c

我在R中有一个很长的列表(“mylist”),其中包含要导出为.csv的字符序列,每个单元格包含1个字符:

> str(mylist)
List of 1
 $ :List of 259
  ..$ : chr [1:214] "A" "B" "C" "D" ...
  ..$ : chr [1:220] "E" "F" "G" "H" ...
当我在上面使用write.csv时,我得到一个错误,因为列表包含不同数量的行。好的所以我试着:

mynewlist<-do.call("cbind", mylist)
write.csv(t(mynewlist), file="mynewlist.csv", quote = FALSE)

作为我在excel中加载时的输出,它仍然包含双引号以及“c(”在第一个单元格中可以看到。此外,尽管CSV的第一行应该有214列,但它在101个单元格后会换回新行。write.CSV和write.table函数看起来非常简单,我的数据集也是如此,所以我不确定这里发生了什么。有什么想法为什么我不能获得干净的CSV导出?谢谢!

write.table仅在一次写入所有行时才考虑数据格式。您可以简单地将其包装在循环中:

mylist <- list(sample(letters,10), sample(letters,20))

# write in a loop
for(i in mylist) write.table(t(i), "mytext.csv", quote=F, append=T, 
                 col.names=F, row.names=F)

请注意,
append=T
不会在该文件已经存在时警告您,因此,如果需要,最好检查它。

您想要实现什么还不太清楚。使用
write.csv()
时,您首先需要一个data.frame,但您有一个由不同长度的字符串向量组成的列表

如果您只想将一个列表项的所有字符写在一行中,并用逗号分隔,我将使用以下方法:

for( i in mylist ) cat( file = "myfile.csv", i, "\n", sep = ",", append = TRUE )
如果您想先构建data.frame,然后使用
write.csv()
将其保存到文件中,那么事情就有点复杂了。优点可能是(取决于接下来的步骤)所有行的长度都相同

# get max length of of list items
longest <- max( sapply( mylist, length ) )
# initialize data.frame
myDF <- NULL
# loop through your list and make it a data.frame (matrix, actually)
for( i in 1 : length( mylist ) )
{
  # fill up with empty strings
  empty <- longest - length( mylist[[ i ]] )
  mylist[[ i ]] <- c( mylist[[ i ]], rep( "", empty ) )
  # append to data.frame
  myDF <- rbind( myDF, mylist[[ i ]] )
}
# now you can juse write.csv()
write.csv( myDF, "myfile.csv" )
#获取列表项的最大长度

你应该做一个。给出一个具体的
mylist
(a
dput()
会很有帮助)的样本,并写出该样本输入的所需输出。所需输出如最后一个代码框所示,但没有引号,没有“c(”在V1,1中,没有像前面描述的那样对行进行包装。谢谢!这确实有效,尽管看起来应该有一些更简单的东西也可以工作,不需要循环和附加。
for( i in mylist ) cat( file = "myfile.csv", i, "\n", sep = ",", append = TRUE )
# get max length of of list items
longest <- max( sapply( mylist, length ) )
# initialize data.frame
myDF <- NULL
# loop through your list and make it a data.frame (matrix, actually)
for( i in 1 : length( mylist ) )
{
  # fill up with empty strings
  empty <- longest - length( mylist[[ i ]] )
  mylist[[ i ]] <- c( mylist[[ i ]], rep( "", empty ) )
  # append to data.frame
  myDF <- rbind( myDF, mylist[[ i ]] )
}
# now you can juse write.csv()
write.csv( myDF, "myfile.csv" )