我正在尝试使用以下代码在2个数字(共5个)中选择最大值。
这些是我尝试访问的列的两个级别:
lev_opsins_SC = c("SWS2Aa", "SWS2B")
对每个人重复它们(但是该循环有效)。 对于每个人,我试图告诉R仅访问与lev_opsins_SC相对应的数据,并告诉我哪个是最大值,然后将其存储。
我发现了问题所在,但不知道如何解决:
max(df$Rate[df$Specimen=="L20" & df$Opsins == lev_opsins_SC])
[1] 0.509928
max(df$Rate[df$Specimen=="L26" & df$Opsins == lev_opsins_SC])
[1] -Inf
Warning message:
In max(df$Rate[df$Specimen == "L26" & df$Opsins == lev_opsins_SC]) :
no non-missing arguments to max; returning -Inf
这是两个不同的个体L26和L20的输出。
我发现,如果我像这样改变我的水平顺序:
lev_opsins_SC = c("SWS2B", "SWS2Aa")
我得到L26的最大值和L20的错误消息。
知道为什么会这样吗? 数据保存在.csv文件中,该文件的保存顺序与所有个人完全相同。
完整循环(lev_ind是针对个人的级别):
for (i in lev_ind) {
maximum = max(df$Rate[df$Specimen==i & df$Opsins == lev_opsins_SC])
for (j in lev_opsins_SC) {
rate = df$Rate[df$Specimen==i & df$Opsins==j]
if (rate == maximum) {
df$Rate[df$Specimen==i & df$Opsins==j] = 1
} else {
df$Rate[df$Specimen==i & df$Opsins==j] = (1/(maximum))*rate
}
}
}
return(df)
}