如何使在 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 <- 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 <-
完全没有任何作用。 Data_Summary 的值仅分配给Data_Summary_df <-
。函数内的最后一行应该是c(SNR50,slope)
。以上是关于如何使在 ddply 中创建的对象在函数外部可用(在全局环境中)?的主要内容,如果未能解决你的问题,请参考以下文章