r - 当您对每种治疗有不同的 n 时使用 tapply
问题描述
我是一名 R 初学者,试图将我的数据拟合到非线性回归中。具体来说,我想将不同温度下昆虫发育的速率拟合为幂函数。下面是我的代码,修改自本页底部的示例: https://docs.tibco.com/pub/enterprise-runtime-for-R/3.1.0/doc/html/Language_Reference/stats/selfStart。 html
您应该能够将下面的代码粘贴到 R 中以获取我得到的内容。
LarvaeDevelopment <- structure(list(Larvae_temp = c(10L, 10L, 10L, 10L, 10L, 10L),
Larvae_rate = c(0.047757234, 0.04174518, 0.04174518, 0.04174518, 0.04174518, 0.04174518)), .Names = c("Larvae_temp", "Larvae_rate"), row.names = c(NA, 6L), class = "data.frame")
SSpower<-(selfStart(~A*(Larvae_temp^B),
initial=function(mCall,data,LHS)
{xy<-sortedXyData(mCall[["Larvae_temp"]],mCall[["Larvae_rate"]],LarvaeDevelopment) ##I think the error appears in this line of code, or the one below
z<-xy[["Larvae_rate"]]
aux<-coef(lm(Larvae_temp~z,LarvaeDevelopment))
pars<-as.vector(coef(nls(Larvae_rate~A*(Larvae_temp^B))),start=list(A=aux[1],B=aux[2]),data=LarvaeDevelopment,algorithm="power")
value<-list(pars[1],pars[2])
names(value)<-mCall[c("A","B")]
value},
parameters=c("A","B")))
getInitial(Larvae_rate ~ SSpower(Larvae_temp, A, B), data=LarvaeDevelopment)
当我显示回溯时,这些是出现的步骤:
Error in tapply(y, x, mean, na.rm = TRUE) : arguments must have same length
9. stop("arguments must have same length")
8. tapply(y, x, mean, na.rm = TRUE)
7. sortedXyData.default(mCall[["Larvae_temp"]], mCall[["Larvae_rate"]],
LarvaeDevelopment)
6. sortedXyData(mCall[["Larvae_temp"]], mCall[["Larvae_rate"]],
LarvaeDevelopment)
5. (attr(object, "initial"))(mCall = mCall, data = data, LHS = LHS)
4. getInitial.selfStart(func, data, mCall = as.list(match.call(func,
call = object[[3L]])), LHS = object[[2L]], ...)
3. getInitial(func, data, mCall = as.list(match.call(func, call = object[[3L]])),
LHS = object[[2L]], ...)
2. getInitial.formula(Larvae_rate ~ SSpower(Larvae_temp, A, B),
data = LarvaeDevelopment)
1. getInitial(Larvae_rate ~ SSpower(Larvae_temp, A, B), data = LarvaeDevelopment)
我认为问题可能来自每个治疗的 n 不相等的事实。例如,对于温度 10、15、20、30,n = 58,165,113,26。对应的 y 值 (Larvae_rate) 与每个 x 值 (Larvae_temp) 匹配。有人知道如何解决这个问题吗?
如果有人可以查看我的代码并查看它是否有意义,我也会非常感激!我对 R 还是很陌生,调试这段代码已经占据了我的生活。
如果我能提供更多信息,请告诉我。谢谢!!
解决方案
我已经编辑所以现在LarvaeDevelopment
存在,我们可以重现您的问题。
简短回答:您的 SSpower 对象在其Initial
功能中有几个错误和不一致之处:不应使用您的全局数据对象,而应仅使用其参数,公式不应使用Larvae_temp
butx
等。
您还引用了一个相对较旧版本的 R (3.1.0) 的基于 tibco 的镜像,并且当前版本的 R 有一个稍微更新的 selfStart 帮助页面。
我们确实需要另一个志愿者来重写您的定义SSpower
,但请相信我在 R-devel 上对您的回答:当参差不齐的数组中的“元素”数量不同时,tapply确实有效!例如,
grps <- as.factor(c(3,5,3,3,6:5))
tapply(1:6, grps, sum)
分别显示 3 和 8,8,5 的 3 和 2 和 1 元素:
3 5 6
8 8 5
推荐阅读
- flutter - Wheel ListView 小部件内的颤振按钮
- git - 如何在终端中重命名 git commit
- linux - 运行较新版本的 cURL 时的 SSL_ERROR_SYSCALL(错误 35)
- javascript - 将一个 div 居中并将右侧菜单附加到该 div
- xcode - 无效参数:Api 类型的对象/工厂已在 GetIt 中注册
- python - 从python字符串中删除引号
- javascript - 延迟执行 jQuery/javascript 函数,直到满足特定条件
- jenkins - 如何将矩阵部分添加到管道以在多个节点上运行管道?
- reactjs - 如何使用 axios React 通过 UI 显示我的后端 api 错误?
- anylogic - 在 AnyLogic 中设置高峰时间时,如何模拟具有正态分布的汽车到达?