我想计算基于两个分组(门和环境)的平均值(以及其他计算),我想重定向到输出到一个文件。我知道下面的代码有效。R函数不返回预期的向量
new_df = myDF[(myDF$Environment=='Water_MarineTreated') & (myDF$Phylum=='Acidobacteria'),]
print(mean(new_df$pH))
但是,因为有这么多的环境和众多的门,我觉得包含循环的函数是最好的方法。我有一个函数,它将一个矢量的名称和计算的名称(例如mean,sd,var等)循环通过每个环境和每个门,计算每个置换的平均pH值,并将其添加到矢量,并返回矢量。不幸的是,返回值是“数字(0)”。虽然这正在返回我告诉它,但这不是我想要的。
我认为规则是每个职位的一个问题,所以如果有人可以解释为什么有一个空的向量返回,而不是一个向量填充pH值的手段,我将不胜感激。如果规则可以稍微弯曲一些,并且有人可以回答为什么“eName = numeric()”不起作用,我也会很感激。如果我在内部循环中放置一个虚拟打印语句,那么当我使用eName = numeric()时,不会打印任何内容,就像我初始化Water_MarineTreated = numeric()时打印的虚拟语句。
我的功能和函数调用如下。
fileName = 'mini.txt'
myDF = read.csv(fileName, header = TRUE, sep = ' ')
environment = unique(unlist(myDF$Environment, use.names = FALSE))
phyla = unique(unlist(myDF$Phylum, use.names = FALSE))
Statistics = function(eName, funName)
{
#eName = numeric() #This approach does not work?!!
for (i in environment)
{
for (j in phyla)
{
stats_df = myDF[(myDF$Environment==i) & (myDF$Phylum==j),]
if (i == deparse(substitute(eName)))
{
#Water_MarineTreated == c(Water_MarineTreated, funName(as.numeric(stats_df$pH)))
eName == c(eName, funName(as.numeric(stats_df$pH)))
print('dummy_statement')
}
}
}
return(eName)
}
Water_MarineTreated = numeric()
Water_MarineTreated = Statistics(Water_MarineTreated, mean)
print(Water_MarineTreated)
输入的样本是这样的:
Phylum pH Environment
Acidobacteria 5.4 Water_MarineTreated
Acidobacteria 6.1 Water_PondTreated
Acidobacteria 6.1 Water_MarineTreated
Acidobacteria 5.6 Water_MarineTreated
Acidobacteria 6.2 Water_MarineTreated
Deinococcus_Thermus 4.9 Water_MarineTreated
Firmicutes 5.1 Water_MarineTreated
Firmicutes 5.5 Water_MarineTreated
我完全看到错误(==!= =)。我改变了它,它返回一个结果。您对覆盖的评论也是正确的。我会修改我的代码或使用其他建议。谢谢。 – cer