r - 为 csv 输出文件 R 创建一个循环
问题描述
我正在尝试在我的脚本中创建一个循环以获得输出文件。在我的脚本中,我已经有其他 2 个循环用于读取输入文件。在我的脚本结束时,我的环境中有一个 df,我想用输入文件的名称将其另存为 .csv。这是我的代码的简化版本:
filePdbs <- Sys.glob("*.pdb")
fileTurns <- Sys.glob("*.txt")
for (filePdb in filePdbs) {
"pdb" <- print(read.pdb(filePdb))
##other stuff here
"coord" <- print(read.pdb(filePdb))
##other stuff here
for (fileTurn in fileTurns) {
"turn" <- read.delim(fileTurn, header = T, sep = "")
## here I have lines for merging info from pdb and txt and I obtain my df that I'd like to save as csv
}
}
对于这两个输入文件循环,我必须为具有相同输入文件名称的 csv 输出创建第三个全局循环。输入文件类似于“1abc_A.pdb”和“1abc_A.txt”,我想输出“1abc_A.csv”我该怎么做?
解决方案
正如评论中已经指出的那样,我看到您的代码存在几个问题,但据我所知,实际问题是如何更改以字符串结尾的文件。
最简单的方法是使用sub(pattern="pdb$", replacement="csv", x=filePdb)
. 这会在字符串末尾找到字母“pdb”($ 表示行尾)并将其替换为“csv”。在修改变量后,我会立即将此行放在您的第二次查看中。或者,您可以在使用它们之前先使用filePdbs
而不是filePdb
保存所有修改过的文件名。
因此,这是我将在您的代码示例中更改的内容:
当您读入不需要的文件时print
,大多数情况下会将内容打印到控制台,但我们希望将文件内容保存在变量中。
变量没有引号。在名称周围加上引号会更改含义,并且您会得到一个无法存储任何内容的字符串。
您似乎在循环中两次读取了 filePdb 文件。这是低效的。如果您想使用坐标访问矩阵并将其存储在一个名为“coord”的变量中,您可以使用pdb$xyz
(我们在这里讨论的是 bio3d 包,对吗?)。
因此,您循环遍历每个 .pdb 文件的每个 .txt 文件。([没有 txt] * [没有 pdb])。我认为您可能有文件对,如果是这样,每个 pdb 文件只需要打开 1 个 txt 文件。你可以用
for (i in seq(along=filePdbs)) {
pdb <- read.pdb(filePdbs[i])
turn <- read.delim(fileTurn[i], header = T, sep = "")
# ...
}
(确保sep
论点符合您的目的。)
最后,如上所述,将write.csv()
(或更多控制输出设置write.table()
)放入内部循环并使用sub()
.
filePdbs <- Sys.glob("*.pdb")
fileTurns <- Sys.glob("*.txt")
for (filePdb in filePdbs) {
pdb <- read.pdb(filePdb)
##other stuff here
coord <- pdb$xyz
##other stuff here
for (fileTurn in fileTurns) {
turn <- read.delim(fileTurn, header = T, sep = "")
## here I have lines for merging info from pdb and txt and I obtain my df that I'd like to save as csv
write.csv(result,
file=sub("pdb$", "csv", x=filePdb),
row.names=F)
}
}
推荐阅读
- python - 部署后将文件上传到文件夹烧瓶应用程序的问题
- docker - 使用 microsoft/aspnet docker 映像出现 Windows 容器错误的 Service Fabric
- python - 使用给定密码从加密的 rar 文件中提取内容
- dask - 具有异步实时并行性的 Dask 分布式
- java - 通过java socket使用HTTP协议上传文件
- redis - StackExchange Redis 故障转移损坏连接
- php - 无法按照我的意愿将数据写入 JSON
- go - 在 Kubernetes 上安装证书
- testing - 可以操纵 CasperJS 断言吗?
- javafx - 从配置文件将 MenuItem 加速器加载到 FXML 中?