【问题标题】:Custom function does not work in R 'ddply' function自定义函数在 R 'ddply' 函数中不起作用
【发布时间】:2013-11-20 12:51:01
【问题描述】:

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

归一化函数如下:

  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))

代码运行,但是当我尝试仔细检查(聚合或点击)时,如果在 'Concentration_nM'==0.01 时,'NormViability' 的平均值等于 '100',我得到的不是 100,而是不同的数字。事实是,如果我尝试通过变量“ExpType”的两个级别对我的 df 进行子集化,则代码会在每个分离的子集上返回正确的数字。我试图使“ExpType”成为字符或因子,但得到了类似的结果。 'ExpType 有两个级别/值,分别是“组合”和“剂量响应”。我不知道为什么代码不能在整个 df 上运行,我想知道这是否是因为“ExpType”的两个级别不包含所有其他变量的相同级别数,例如“ExpType”的“组合”级别缺少“Time_h”级别之一。

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

米歇尔

【问题讨论】:

  • 我想你只需要删除 "NormViability=" 。查看?ddply下的示例
  • 非常感谢,我尝试删除“NormViability=”,但在新数据框中没有新变量。我试图将新变量重命名为没有大写字母的较短名称,但没有奏效。相同的代码在分组变量较少的类似数据集中工作。

标签: r plyr


【解决方案1】:

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

【讨论】:

  • 如果您真的是 OP,您应该以 @user3013002 身份登录并发布您自己问题的答案,可能会接受此答案。如果您想这样做,您仍然可以将您的用户名更改为“Michele”。
猜你喜欢
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多