首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用ddply时将多个参数传递给现有函数?

如何在使用ddply时将多个参数传递给现有函数?
EN

Stack Overflow用户
提问于 2015-03-14 05:27:19
回答 1查看 2K关注 0票数 0

我看到了很多类似的问题,但没有什么能完全暗示如何解决我的具体问题。我有一个数据框架(很好地融化了),它包括两个因子列和两个列,我想用它们来提供一个有两个参数的函数。我基本上想做ddply所做的事情,因为它会将两个参数提供给函数,用于两个因子的组合。在我的例子中,函数"ros“(包"CensReg")的第二个参数属于"logical”类,所以我创建了一组虚拟的True或False标签来处理数字数据。

代码语言:javascript
复制
df <- data.frame(f1=c(rep("A",5), rep("B",5), rep("C",5)), f2=c(rep("Yes",10), rep("No",5)), d1=c(2,2,2,rnorm(12,9)), d2=(c(rep("TRUE",3),rep("FALSE",12))=="TRUE"))

我正在尝试这样做:

代码语言:javascript
复制
ddply(.data = df, .variables = .(f1, f2), function(x,y) ros(d1, d2))

关于ddply,我遗漏了什么可以防止这种情况发生的地方?我得到错误“错误:找不到对象'd1‘”。ros函数的输出类如下所示:

代码语言:javascript
复制
class(ros(x,y))
[1] "ros" "lm" 

如果这搞乱了ddply,我可以看到从函数中提取我需要的东西,类似于从线性回归中提取系数:

代码语言:javascript
复制
ddply(.data = df, .variables = .(f1, f2), function(x,y) mean = mean(ros(d1, d2)))

(相信我,你可以调用mean(ros(.....)并返回一个值;基本上,它是对具有“被审查”数据点(低于测试检测极限)的数据集进行健壮回归,并允许您计算汇总统计数据,您可以使用“均值”、“中值”等手动调用这些统计数据。)

任何关于如何在ddply中将两个d1和d2参数传递给函数的指导都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2015-03-14 05:31:01

使用不带嵌套函数的summarizetransform

代码语言:javascript
复制
ddply(.data = df, .variables = .(f1, f2),summarize,ros(d1,d2))

或者,如果要使用嵌套函数,则应使用包含分组元素的单个参数(data.frame)创建一个:

代码语言:javascript
复制
ddply(.data = df, .variables = .(f1, f2),function(x)ros(x$d1,x$d2))

揭开这一神秘面纱的一个提示是使用browser来检查araguments:

代码语言:javascript
复制
ddply(.data = df, .variables = .(f1, f2),function(x)browser())

现在,如果检查x,就可以验证它是一个data.frame:

代码语言:javascript
复制
Browse[1]> x

#    f1  f2       d1    d2
# 1  A Yes 2.000000  TRUE
# 2  A Yes 2.000000  TRUE
# 3  A Yes 2.000000  TRUE
# 4  A Yes 7.448215 FALSE
# 5  A Yes 8.599762 FALSE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29042246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档