【发布时间】: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) 尽早避免不良习惯,例如保持单一、孤立的不良习惯,但在您的工作区中类似命名的对象。如果它们是相关的,并且需要分组计算,请将它们放在命名列表中。如果您刚刚开始并且正在求助于get或mget,那么您可能没有选择最佳路径。 -
谢谢@joran 我会记住这一点!我之前尝试过的是创建两个数据框列表。但是从列表中我需要始终将 [1] 与 [1]、[2] 与 [2] 等 cbind ......在这里,我只是找不到解决方案
-
@joran 我更改了代码以保存索引变量(见编辑)。但这并没有解决问题