我看到了很多类似的问题,但没有什么能完全暗示如何解决我的具体问题。我有一个数据框架(很好地融化了),它包括两个因子列和两个列,我想用它们来提供一个有两个参数的函数。我基本上想做ddply所做的事情,因为它会将两个参数提供给函数,用于两个因子的组合。在我的例子中,函数"ros“(包"CensReg")的第二个参数属于"logical”类,所以我创建了一组虚拟的True或False标签来处理数字数据。
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"))我正在尝试这样做:
ddply(.data = df, .variables = .(f1, f2), function(x,y) ros(d1, d2))关于ddply,我遗漏了什么可以防止这种情况发生的地方?我得到错误“错误:找不到对象'd1‘”。ros函数的输出类如下所示:
class(ros(x,y))
[1] "ros" "lm" 如果这搞乱了ddply,我可以看到从函数中提取我需要的东西,类似于从线性回归中提取系数:
ddply(.data = df, .variables = .(f1, f2), function(x,y) mean = mean(ros(d1, d2)))(相信我,你可以调用mean(ros(.....)并返回一个值;基本上,它是对具有“被审查”数据点(低于测试检测极限)的数据集进行健壮回归,并允许您计算汇总统计数据,您可以使用“均值”、“中值”等手动调用这些统计数据。)
任何关于如何在ddply中将两个d1和d2参数传递给函数的指导都将不胜感激!
发布于 2015-03-14 05:31:01
使用不带嵌套函数的summarize或transform:
ddply(.data = df, .variables = .(f1, f2),summarize,ros(d1,d2))或者,如果要使用嵌套函数,则应使用包含分组元素的单个参数(data.frame)创建一个:
ddply(.data = df, .variables = .(f1, f2),function(x)ros(x$d1,x$d2))揭开这一神秘面纱的一个提示是使用browser来检查araguments:
ddply(.data = df, .variables = .(f1, f2),function(x)browser())现在,如果检查x,就可以验证它是一个data.frame:
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 FALSEhttps://stackoverflow.com/questions/29042246
复制相似问题