自定义函数在 R 'ddply'函数中不起作用



我正试图在"ddply"中使用一个自定义函数,以便在我的数据帧中基于预先存在的变量(CelltiterGLO)的值创建一个新变量(NormViability)。该函数旨在根据变量"Concentration_nM"(0.01)的特定子级别的平均"CelltiterGLO"值,创建"Celltiter_GLO"的重新缩放(%)值。因此,如果"Concentration_nM"==0.01时"CelltiterGLO"的平均值设置为100,我想在其他变量("TSC"、"Time_h"one_answers"ExpType")的水平上重新缩放"CelltiterCLO"的所有其他值。

归一化函数如下:

  normalize.fun = function(CelltiterGLO) {
         idx = Concentration_nM==0.01
         jnk = mean(CelltiterGLO[idx], na.rm = T)
         out = 100*(CelltiterGLO/jnk)
         return(out) 
  }

这是我试图应用于我的数据帧的代码:

library("plyr")
df.bis=ddply(df,
             .(CTSC, Time_h, ExpType),
             transform, 
             NormViability = normalize.fun(CelltiterGLO))

代码会运行,但当我试图再次检查(聚合或tapply)"正常生存能力"的平均值是否等于"100"("Concentration_nM"==0.01)时,我不会得到100,而是得到不同的数字。事实是,如果我试图用变量"ExpType"的两个级别对我的df进行子集设置,代码会在每个分离的子集上返回正确的数字。我试图将"ExpType"设为字符或因子,但得到了类似的结果ExpType有两个级别/值,分别为"组合"one_answers"剂量响应"。我不明白为什么代码不能在整个df上工作,我想知道这是否是因为'ExpType'的两个级别对于所有其他变量都不包含相同数量的级别,例如'ExpType`的级别"Combinations"缺少'Time_h'的一个级别。

非常感谢您的帮助,如果答案已经出现在Stackoverflow中,而我找不到它,我提前道歉。

Michele

I(OP)发现函数在参数中缺少一个变量,该变量在语句中使用。简单地将变量Concentration_nM添加到自定义函数中就解决了这个问题。谢谢m.

最新更新