自定义功能在R'ddply'功能中不起作用

时间:2013-11-20 12:51:01

标签: r plyr

我正在尝试在'ddply'中使用自定义函数,以便根据预先存在的变量(CelltiterGLO)的值在我的数据框中创建一个新变量(NormViability)。 该函数用于基于变量'Concentration_nM'(0.01)的特定子级别的平均'CelltiterGLO'值创建'CelltiterGLO'的重新缩放(%)值。 因此,如果'Concentration_nM'= 0.01的'CelltiterGLO'的平均值设置为100,我想重新调整'CelltiterGLO'的所有其他值超过其他变量的级别('CTSC','Time_h'和'ExpType')

规范化功能如下:

  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)如果'NormViability'的平均值在'Concentration_nM'= 0.01时等于'100',我不会得到100,但是数字不同。事实是,如果我尝试通过变量'ExpType'的两个级别对我的df进行子集化,则代码会在每个分离的子集上返回正确的数字。我尝试将'ExpType'设为字符或因子,但我得到了类似的结果。 'ExpType有两个级别/值,分别是“组合”和“DoseResponse”。我无法弄清楚为什么代码不能在整个df上工作,我想知道这是否是由于两个级别的'ExpType'不包含所有其他变量的相同级别的事实,例如“ExpType”的“组合”级别缺少“Time_h”级别之一。

非常感谢您的帮助,如果Stackoverflow中已经存在答案且我无法找到答案,我会提前道歉。

米歇尔

1 个答案:

答案 0 :(得分:-1)

我(OP)发现该函数在参数中缺少一个变量,该变量在语句中使用。只需将变量Concentration_nM添加到自定义函数即可解决问题。 谢谢 米

相关问题