如何使在 ddply 中创建的对象在函数外部可用(在全局环境中)?

Posted

技术标签:

【中文标题】如何使在 ddply 中创建的对象在函数外部可用(在全局环境中)?【英文标题】:How can I make an object created within ddply available outside the function (in the global environment)? 【发布时间】:2017-03-14 01:47:20 【问题描述】:

我正在尝试对数据集中的多个个体主题运行 glm 以返回特定系数。我在这里找到了一个很好的例子(Multiple glm in for loop)。除了,结果打印到屏幕上,但之后不可用。因此,除非我在 RStudio 中突出显示屏幕然后复制/粘贴到 Excel 中,否则我无法保存结果或重命名变量。

数据:

   Subject SNRs Prop_Correct Ntrials
       1    3         0.65     100
       1    0         0.40     100
       1   -3         0.15     100
       1   -6         0.00     100
       1   -9         0.00     100
       1  -12         0.00     100
       2    3         0.65     100
       2    0         0.40     100
       2   -3         0.15     100
       2   -6         0.00     100
       2   -9         0.00     100
       2  -12         0.00     100
       3    3         0.65     100
       3    0         0.40     100
       3   -3         0.15     100
       3   -6         0.00     100
       3   -9         0.00     100
       3  -12         0.00     100

我的脚本:

ddply(Data, .(Subject), function (x)
  intercept <- coef(summary(glm(Prop_Correct~SNRs, weights=Ntrials,family=quasibinomial(link='logit'),data=x)))[1]
  slope     <- coef(summary(glm(Prop_Correct~SNRs, weights=Ntrials,family=quasibinomial(link='logit'),data=x)))[2]
  SNR50      <- (log(0.5/(1-0.5))/slope) - (intercept/slope)
  Data_Summary <- c(SNR50,slope)
)

这给了我这个输出:

  Subject       V1        V2
1       1 1.266165 0.4834356
2       2 1.266165 0.4834356
3       3 1.266165 0.4834356

但是:

Data_Summary
Error: object 'Data_Summary' not found

如何使 ddply 函数的结果可用于主/全局环境?

【问题讨论】:

您需要将函数的结果分配给 globalenv() 中的名称 Data_Summary,而不是函数中。 这是我无法解决的问题。函数的结果在函数之外不可用。如果我在函数之后尝试 Data_Summary,我得到:错误:找不到对象'SNR50' 试试assign函数。 这几乎可行,除了我只得到最后一个主题的结果。 results &lt;- c(slope,SNR50) assign("Data_Summary",value=results,envir=globalenv()) ) 我将预期的输出打印到屏幕上,但 Data_Summary 仅在一行中显示 2 个值 使用list 而不是c 【参考方案1】:

将结果分配给变量:

Data_Summary_df <- ddply(Data, .(Subject), function (x)
  intercept <- coef(summary(glm(Prop_Correct~SNRs, weights=Ntrials,family=quasibinomial(link='logit'),data=x)))[1]
  slope     <- coef(summary(glm(Prop_Correct~SNRs, weights=Ntrials,family=quasibinomial(link='logit'),data=x)))[2]
  SNR50      <- (log(0.5/(1-0.5))/slope) - (intercept/slope)
  Data_Summary <- c(SNR50,slope)
)

Data_Summary_df

虽然发生了很多事情,但将其视为任何函数调用,如果未分配给变量,它只会输出结果,如果您希望保留结果,则将其分配给变量,例如

mean(1:25)
calc_mean <- mean(1:25)
calc_mean

【讨论】:

神奇而令人尴尬的直截了当!谢谢! 那 ... 与我的评论推荐的内容非常接近。函数内部的Data_Summary &lt;- 完全没有任何作用。 Data_Summary 的值仅分配给Data_Summary_df &lt;-。函数内的最后一行应该是c(SNR50,slope)

以上是关于如何使在 ddply 中创建的对象在函数外部可用(在全局环境中)?的主要内容,如果未能解决你的问题,请参考以下文章

使在 Xcode 11 中创建的项目向后兼容

在构造函数中创建的外部向量

如何调用在另一个函数中创建的对象

你如何调用在javascript中的数组中创建的对象的函数?

dart:在循环函数中创建的对象会被缓存还是重新创建?

为啥你不能命名一个在函数中创建的对象,与它在 Python 中的类名完全相同?