如何使用'在R中循环

时间:2018-03-22 04:43:28

标签: r list for-loop

这是我第一次使用R,所以我觉得我有一些基本的错误。 请检查我的代码

rm(list = ls())
src_dir = c("C:/Temp/R language/assignment1")
src_file = list.files(src_dir)
src_file_cnt = length(src_file)
for(i in 1:src_file_cnt){
  assign(paste0("x",i),
  read.csv(paste0(src_dir,"/",src_file[i]),sep = ","))
}

src_file_cnt
[1] 1000

x1
      X          x
1     1  22.543542
2     2 104.090425
3     3  41.796371
4     4  63.173507
5     5  70.861756
6     6  66.141905
7     7  80.175190
8     8 112.855912
9     9  61.318575
10   10 -47.001973

a = c( for( i in 1:1000) {mean(xi[,2])})
Error in mean(xi[, 2]) 

我希望得到所有x数据的平均值并使它们成为向量。 我尝试使用'循环,但有一个错误,无法找到xi。 如何更改我的代码??

2 个答案:

答案 0 :(得分:0)

在您的问题中,R不会像您调用它那样将xi解释为x1,x2或x3。 如果你试图从多个csv中得到列的平均值,那么我会以不同的方式处理问题。

我个人更喜欢一起阅读多个csv并将它们存储在一个列表中。所以我会做以下事情:

all_csv = lapply(paste0(src_dir,"/",src_file[i]), read.csv)

现在要计算每个文件的列的平均值,您可以使用

t(sapply(all_csv, sapply, mean))  

一般情况下,我建议您尽可能使用apply系列中的函数而不是R中的for循环。

答案 1 :(得分:0)

数据框只是列的列表,因此您可以对其进行处理,对其进行应用,并为每列调用mean

尝试例如。

df <- data.frame(x = rnorm(10), y = rnorm(10), z = "some string")
numeric_columns <- df[,c("x", "y")]
lapply(numeric_columns, mean)