【发布时间】:2015-10-18 11:53:30
【问题描述】:
考虑一下这个玩具数据框:
df <- read.table(text = "target birds wolfs
0 21 7
0 8 4
1 2 5
1 2 4
0 8 3
1 1 12
1 7 10
1 1 9 ",header = TRUE)
我想运行一个循环函数来计算每个变量的 2:5 行的平均值并将所有结果保存为 CSV。
我写了这行代码:
for(i in names(df)) {print(mean(df[2:5,i]))}
得到以下结果:
[1] 0.5
[1] 5
[1] 4
但是当我尝试使用下面的代码将其导出到 csv 时,我在文件中只得到了最后一个结果:[1] 4。 代码:
for(i in names(df)) { j<-(mean(df[2:5,i]))
write.csv(j,"j.csv") }
如何在同一个 csv 文件中获取所有结果的列表?
【问题讨论】:
-
write.csv的第一个参数是“要写入的对象,最好是矩阵或数据框。如果不是,则尝试将 x 强制转换为数据框”。您可以使用rbind(colMeans(df[2:5,]))制作一个 1 行矩阵并将其写出来。 -
你为什么要这样做,为什么你不能这样做
colMeans(df[2:5,])? -
您在循环的每次迭代中都在写
j.csv。 j 只保存最后一个值。在循环j <- list()之前对其进行初始化,将手段分配给j[[i]],并在整个循环完成后写入csv。也就是说,这不是计算列均值的正确方法。看看?colMeans或?dplyr::summarize_each -
This 我的回答可能非常有用;实际上它几乎是重复的,即使它需要适应导出文件而不是将它们保存在 R 环境中。
-
你好@David Arenburg,我使用 mean 函数只是为了给出循环的结构。我的真实世界函数是不同的。