【问题标题】:For loop Error with write.csv function对于 write.csv 函数的循环错误
【发布时间】:2016-05-02 20:56:55
【问题描述】:

我是一名 R 新手,正在尝试编写他的第一个脚本。我在 for 循环中遇到了问题。 在我的代码中,我从共享部分通用名称的 2 个向量创建 2 个列数据框。我使用 for 循环对其中几个常用名称(由向量 a 定义)执行此操作。

paste("A",1:4,sep="")->a    
for ( i in a) {
  j<-grep(x= ls(pos=1), pattern=i, value=TRUE)
  data.frame(do.call(cbind,mget(j)))-> k
  print(k)
}

这可行,但我遇到了一个问题,当我想使用以下代码将这些数据帧打印为单独的 csv 文件时:

for ( i in a) {
  j<-grep(x= ls(pos=1), pattern=i, value=TRUE)
  data.frame(do.call(cbind,mget(j)))-> k
  print(k)
  write.table (k, file = paste("Results_",i, sep=''))
}

显示的错误如下

Error in file(file, ifelse(append, "a", "w")) : 
 invalid 'description' argument
In addition: Warning message:
In if (file == "") file <- stdout() else if (is.character(file)) { :
  the condition has length > 1 and only the first element will be used

此外,fllwing 已经工作,但是,当然,只创建了最后一次迭代的一个 csv 文件

for ( i in a) {
j<-grep(x= ls(pos=1), pattern=i, value=TRUE)
data.frame(do.call(cbind,mget(j)))-> ff
print(ff)
write.table (ff, file = "results_df.csv")}

谢谢!

【问题讨论】:

  • 还有:在其他一些关于这个错误的问题中,提到我需要写权限。我愿意,因为 write.csv 以前在同一目录中工作过
  • 更改用于for 循环的索引变量的值不会带来任何好处。 (这是一个提示。)
  • ...另外,如果您真的刚刚开始,请注意 (1) data.frame(cbind()) 通常是一个非常糟糕的主意; cbind 会将所有对象强制为一种类型,因此创建 data.frame 可能是一种非常误导且容易出错的方式,并且 (2) 尽早避免不良习惯,例如保持单一、孤立的不良习惯,但在您的工作区中类似命名的对象。如果它们是相关的,并且需要分组计算,请将它们放在命名列表中。如果您刚刚开始并且正在求助于getmget,那么您可能没有选择最佳路径。
  • 谢谢@joran 我会记住这一点!我之前尝试过的是创建两个数据框列表。但是从列表中我需要始终将 [1] 与 [1]、[2] 与 [2] 等 cbind ......在这里,我只是找不到解决方案
  • @joran 我更改了代码以保存索引变量(见编辑)。但这并没有解决问题

标签: r loops for-loop


【解决方案1】:

文件错误的关键是:

文件中的错误(文件,ifelse(追加,“a”,“w”)):无效 'description' 参数另外:警告消息:在 if (file == "") file is.character(file)) { : 条件 长度 > 1 并且只使用第一个元素

'file' 显然是一个向量,而不是单个字符串。

这可能不是唯一的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多