【发布时间】:2020-01-29 15:55:09
【问题描述】:
所以我有一个 .txt 文件的目录。每个都包含代表某些测量特征的列。对于同一目录中的文件,我想将名为treatmentsum 的一列的内容替换为3S_TNFaCHx_cluster1_333nM+0.1ug/ml_none。 (我将在不同文件夹中用不同名称替换同一列,是的,我知道这个名称非常烦人,相信我还有更糟糕的名称)
所以我想,替换数据框中的列很容易,我只需打开目录然后执行以下操作:
df <- read.table(x, header=TRUE)
df$treatmentsum <- c("3S_TNFaCHx_cluster1_333nM+0.1ug/ml_none")
接下来,我只需要将它设为一个函数并将lapply 用于目录中的所有文件,并确保将新文件存放在新文件夹中。
完整的代码不起作用:
#set up directories
directory <- "C:/Users/XXX"
outdirectory <- "C:/Users/XXX/replaced"
#find all .txt files in the directory
files <- list.files(path=directory, pattern="*.txt", full.names=TRUE, recursive=FALSE)
lapply(files, function(x) {
df <- read.table(x, header=TRUE)
df$treatmentsum <- c("the new stupid name thanks to pharma")
out <- function(df)
# write to file
write.table(out, outdirectory, sep="\t", quote=FALSE, row.names=FALSE, col.names=TRUE)
})
我收到的警告信息:
扫描错误(文件 = 文件,什么 = 什么,sep = sep,quote = quote,dec = dec,: 第 1 行没有 744 个元素
【问题讨论】:
-
一个明显的问题是这个
out <- function(df)什么都不返回。只需将df传递给write.table。 -
感谢 Parfait 的编辑。我删除了
-
你应该给输出路径一个物理文件而不是文件夹。
-
我不太明白,对不起这里的菜鸟。你的意思是 write.table(df, XXX, sep="\t", quote=FALSE, row.names=FALSE, col.names=TRUE)。 XXX 需要是一个文件吗?我应该放什么文件?