Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环遍历R中的文件_R_Loops_Statistics - Fatal编程技术网

循环遍历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来计算文件中一列的平均值,如下所示:

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)