循环遍历R中的文件
我使用R来计算文件中一列的平均值,如下所示:循环遍历R中的文件,r,loops,statistics,R,Loops,Statistics,我使用R来计算文件中一列的平均值,如下所示: R file1 = read.table("x01") mean(file1$V4) 但是,我没有构建涉及R的循环的经验,只有bash。 如何将其转换为循环,对文件夹中的每个文件执行此操作,并将输出保存到一个文件中,文件名和平均值作为每行的2列? 例如: 等 (不介意解决方案是bash和R还是R) 非常感谢你的帮助 使用bash和R的解决方案之一的当前错误: Error in `[.data.frame`(read.table("PercentWi
R
file1 = read.table("x01")
mean(file1$V4)
但是,我没有构建涉及R的循环的经验,只有bash。
如何将其转换为循环,对文件夹中的每个文件执行此操作,并将输出保存到一个文件中,文件名和平均值作为每行的2列?
例如:
等
(不介意解决方案是bash和R还是R)
非常感谢你的帮助
使用bash和R的解决方案之一的当前错误:
Error in `[.data.frame`(read.table("PercentWindowConservedRanked_Lowest_cleanfor1000genomes_1000regions_x013", :
undefined columns selected
Calls: mean -> [ -> [.data.frame
Execution halted
假设列的名称始终相同,则可以在R中执行以下操作:
out.file <- 'means.txt'
for (i in list.files()) {
tmp.file <- read.table(i, header=TRUE) # Not sure if you have headers or not
tmp.mean <- mean(tmp.file1$V4)
write(paste0(i, "," tmp.mean), out.file, append=TRUE)
}
假设列的名称始终相同,则可以在R中执行以下操作:
out.file <- 'means.txt'
for (i in list.files()) {
tmp.file <- read.table(i, header=TRUE) # Not sure if you have headers or not
tmp.mean <- mean(tmp.file1$V4)
write(paste0(i, "," tmp.mean), out.file, append=TRUE)
}
这与@jmsigner所做的类似,但有一些细微的变化。例如,写入文件是在最后完成的。代码还没有经过测试
out <- lapply(list.files(), FUN = function(x) {
m <- mean(read.table(x, header = TRUE)$V4)
return(m)
})
result <- do.call("cbind", out) #merge a list column-wise
# before writing, you can make column names pretty with colnames()
# e.g. colnames(result) <- c("x01", "x02")
write.table(result, file = "means.txt")
out这与@jmsigner所做的类似,但有一些小的变化。例如,写入文件是在最后完成的。代码还没有经过测试
out <- lapply(list.files(), FUN = function(x) {
m <- mean(read.table(x, header = TRUE)$V4)
return(m)
})
result <- do.call("cbind", out) #merge a list column-wise
# before writing, you can make column names pretty with colnames()
# e.g. colnames(result) <- c("x01", "x02")
write.table(result, file = "means.txt")
out我的解决方案也类似于@jmsinger,但您可以在代码本身中指定文件的路径,然后像下面这样计算平均值:
filename <- system("ls /dir/",intern=TRUE)
for(i in 1:length(filename)){
file <- read.table(filename[i],header=TRUE) ## if you have headers in your files ##
mean <- mean(file$V4)
write.table(mean,file=paste("/dir",paste("mean",filename[i],sep="."),sep="/"))
##if you wish to write the means of all the files in seperate files rather than one.
}
filename我的解决方案也类似于@jmsinger,但您可以在代码本身中指定文件的路径,然后像下面这样计算平均值:
filename <- system("ls /dir/",intern=TRUE)
for(i in 1:length(filename)){
file <- read.table(filename[i],header=TRUE) ## if you have headers in your files ##
mean <- mean(file$V4)
write.table(mean,file=paste("/dir",paste("mean",filename[i],sep="."),sep="/"))
##if you wish to write the means of all the files in seperate files rather than one.
}
文件名谢谢,这对我来说是有意义的,尽管它会抛出错误:“}”中出现意外的“}”,我相信我错过了一个)
它现在应该被修复了。hmm仍然会抛出错误。由于选择了未定义的列,执行时运行的bash较多的脚本将暂停。我把全部错误都写在我的问题上了。你必须指定你的专栏。因为您没有提供示例数据集,所以我使用了示例代码中的V4
。将[,'V4']
替换为所需列的编号(不带引号)或此列的名称。当前指定$V4 get:^x时,警告消息:mean()不推荐使用。改用colMeans()或sapply(*,mean)。感谢到目前为止的帮助,我将使用itThanks,这对我来说是有意义的,尽管它会抛出错误:“}”中出现意外的“}”我相信我错过了一个)
现在应该修复它。嗯,仍然会抛出错误。由于选择了未定义的列,执行时运行的bash较多的脚本将暂停。我把全部错误都写在我的问题上了。你必须指定你的专栏。因为您没有提供示例数据集,所以我使用了示例代码中的V4
。将[,'V4']
替换为所需列的编号(不带引号)或此列的名称。当前指定$V4 get:^x时,警告消息:mean()不推荐使用。改用colMeans()或sapply(*,mean)。感谢到目前为止的帮助,我将尝试使用itI。我会尝试将文件读取和平均值计算分为两个步骤。如果询问者想要计算其他统计数据,他们需要数据集,而这些数据集目前正在被丢弃。@RichieCotton我想给出如何使用lappy的一般概念。当然,人们可以或者应该根据自己的需要调整函数。我很想把文件读取和平均值计算分为两个步骤。如果询问者想要计算其他统计数据,他们需要数据集,而这些数据集目前正在被丢弃。@RichieCotton我想给出如何使用lappy的一般概念。当然,人们可以或者应该根据自己的需要调整函数。看起来不错,但会抛出错误:语法错误靠近意外标记“(”从第一行开始我想第一行的意思是:文件名我如何修改您的“写表”命令,以便将所有方法写入同一个文件?您可以使用以下命令:write.table(mean,file=“file.txt”,append=TRUE)看起来不错,但抛出错误:语法错误靠近意外标记“(”从第一行开始,我想第一行的意思是:filename我该如何修改write table命令,以便将所有方法写入同一个文件?您可以使用以下命令:write.table(mean,file=“file.txt”,append=TRUE)