【发布时间】:2022-10-24 22:13:35
【问题描述】:
我不知道我哪里错了。我不断得到:
对象 [[i]] 中的错误:“闭包”类型的对象不是子集
当我在一个简单的数据框上运行它时,同样的代码可以工作,但是对于嵌套数据,它会导致问题。
library(tidyverse) data1 <- data.frame( z = c("1a","1a","1a","1b","1b","1b","2a","2a","2a","2b","2b","2b"), Q = c(1,2,3,4,4,5,6,7,7,8,8,0), J = c(2,4,5,6,7,8,3,7,9,1,34,2) ) Ye_mod <- function(Q, alpha, beta, gamma) (alpha*((1-beta*Q) / (1 + gamma*Q))*Q) JQ_fit <- function(df){ initial_vals <- list(alpha = 0.9, beta = 0.00009, gamma = 0.003) nls(J ~ Ye_mod(Q, alpha, beta, gamma), data=df, start = initial_vals) summary(JQ_fit) fit_coefs <- coef(JQ_fit) alpha_fit <- fit_coefs[1] beta_fit <- fit_coefs[2] gamma_fit <- fit_coefs[3] J_fit <- predict(QJ_fit) PARsat <- (sqrt((beta_fit+gamma_fit)/beta_fit) - 1) / gamma_fit Jmax <- alpha_fit*((sqrt(beta_fit+gamma_fit) - sqrt(beta_fit))/gamma_fit)^2 } #Tibble data2 = nest(data1, data = c(Q, J)) data2 data2 %>% pull(data) JQ_fit(data2$data[[1]])
【问题讨论】:
-
我得到一个奇异的梯度错误,这并不奇怪,因为在这个例子中你试图将一个 3 参数模型拟合到 3 个数据点......
-
PS,如果您尽可能避免将事物命名为“数据”,这将帮助您避免这种令人困惑的错误(例如,如果您只输入
data[[1]]本身,而在您的工作区中没有名为data的数据对象,您将得到“ 'closure' 类型的对象 ...”,因为data()是 R 中的内置函数 ... -
到目前为止,我无法重现这一点;投票结束。 (如果我在这里完全按照在干净的 R 会话中编写的代码运行代码,我不会收到您描述的错误。)