楼主: zxun
16078 6

[问答] 为什么write.csv没办法续写(append=TRUE)? [推广有奖]

  • 5关注
  • 5粉丝

已卖:131份资源

博士生

88%

还不是VIP/贵宾

-

威望
0
论坛币
466 个
通用积分
35.1656
学术水平
21 点
热心指数
22 点
信用等级
20 点
经验
5726 点
帖子
467
精华
0
在线时间
231 小时
注册时间
2010-5-20
最后登录
2022-11-25

楼主
zxun 发表于 2015-12-12 20:48:20 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币


我先写个表,再在同一个csv里面添上新表
  1. > abc = data.frame( letters, LETTERS )
  2. > s = c(rep(1,7), rep(2,7), rep(3,6), rep(4,6) )
  3. > alist = split(abc, s)
  4. > write.csv(alist[[1]], "alist.csv")
  5. > write.csv( alist[[2]], "alist.csv", append=TRUE)
复制代码
  1. Warning message:
  2. In write.csv(alist[[2]], "alist.csv", append = TRUE) :
  3.   attempt to set 'append' ignored
复制代码


这个操作怎么那么难?

完全相同的结构,甚至完全相同的列名,怎么就写不进去?

凭啥给我ignore啊???[curse][curse]




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:append write App End Pen letters

沙发
jiangbeilu 学生认证  发表于 2015-12-13 07:13:44
我想你需要做的其实是这样一件事情,就是有一个list,各个列表元素内容格式相同。然后需要把它们放到一起。

其实比较简单,write.csv是不支持append=TRUE的。你可以先把各列表元素放到一起,变成一个data.frame,然后再用write.csv写出来就行了。
代码如下(你用循环也可以):
  1. alllist <- do.call("rbind",alist)
  2. write.csv( alllist, "alllist.csv")
复制代码
已有 1 人评分经验 收起 理由
李会超 + 60 热心帮助其他会员

总评分: 经验 + 60   查看全部评分

藤椅
suimong 发表于 2015-12-14 02:07:36
给jiangbeilu补充一个reference,来自write.csv的帮助文件:
CSV FILES

By default there is no column name for a column of row names. If col.names = NA and row.names = TRUE a blank column name is added, which is the convention used for CSV files to be read by spreadsheets. Note that such CSV files can be read in R by

  read.csv(file = "<filename>", row.names = 1)
write.csv and write.csv2 provide convenience wrappers for writing CSV files. They set sep and dec (see below), qmethod = "double", and col.names to NA if row.names = TRUE (the default) and to TRUE otherwise.

write.csv uses "." for the decimal point and a comma for the separator.

write.csv2 uses a comma for the decimal point and a semicolon for the separator, the Excel convention for CSV files in some Western European locales.

These wrappers are deliberately inflexible: they are designed to ensure that the correct conventions are used to write a valid file. Attempts to change append, col.names, sep, dec or qmethod are ignored, with a warning.
另外,文本文件的IO我推荐用Hadley Wickham的readr包。readr里有write_csv函数,可以append。

板凳
zxun 发表于 2015-12-15 16:18:04
jiangbeilu 发表于 2015-12-13 07:13
我想你需要做的其实是这样一件事情,就是有一个list,各个列表元素内容格式相同。然后需要把它们放到一起。 ...
不是这意思,我用这个例子只是为了说着方便

还是谢谢你回答

报纸
zxun 发表于 2015-12-15 16:19:29
suimong 发表于 2015-12-14 02:07
给jiangbeilu补充一个reference,来自write.csv的帮助文件:
如果是不可用,为啥不干脆取消这个参数?这些人真是pervert

谢谢你推荐包

现在R越来越小气了,xlsx都被他们取消了

地板
suimong 发表于 2015-12-16 01:02:54
zxun 发表于 2015-12-15 16:19
如果是不可用,为啥不干脆取消这个参数?这些人真是pervert

谢谢你推荐包
这些参数是给write.table用的,write.csv只是write.table的一个加了限制的外壳。这中间的取舍不是我们外人能完全理解的,不管是因为底层设计的原因还是出于向后兼容的考虑,都可能是这些限制的理由。虽然在有些时候确实会发生由于R Core Team认为一些改动虽然可行,但是很费功夫,并且带来的效用微乎其微而不去改进的情况,但是我们还是不要妄加揣测的好。况且,R的强大不正是因为有那么多的包可以用么?base R的确有很多历史包袱,原来留下的坑没法轻易填,而扩展包就可以在不打破向后兼容的前提下把坑给填了。
我认为在了解基础base R的情况下,尽量使用高质量的包是更高效使用R的方法。
另外,据我所知xlsx包是可以用的并且它仍旧还挂在CRAN上,可以用install.packages安装。R Core Team或者R Foundation不会也没有那个精力去像苹果应用商店那样审查CRAN中的每一个包,CRAN只是有一套测试标准,你的包通过测试就可以上传CRAN。即便你的包没有通过CRAN的测试,你还是可以在github上发布的。你用devtools::install_github就可以安装了。
已有 1 人评分论坛币 热心指数 收起 理由
jiangbeilu + 10 + 5 鼓励积极发帖讨论

总评分: 论坛币 + 10  热心指数 + 5   查看全部评分

7
danjoy 发表于 2016-3-6 19:52:59
suimong 发表于 2015-12-14 02:07
给jiangbeilu补充一个reference,来自write.csv的帮助文件:
非常感谢!
你的回答完美的解决了我遇到的问题!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-20 16:04