运行get_pi_ij()函数报错:无法将closure类型转为any向量
问题解决:Error in as.vector(x, mode) : cannot coerce type 'closure' to vector of type 'any'
错误根源
你的get_pi_ij()函数里创建betas矩阵时,漏写了get_beta_prelim的调用括号——直接传递函数对象(类型为closure)给matrix(),而matrix()需要的是数值/向量数据,自然触发类型转换报错。
看这段问题代码:
betas <- matrix(get_beta_prelim, # 这里传的是函数本身,不是函数返回值 nrow = length(get_beta_prelim()), ncol = length(get_beta_prelim()), byrow = TRUE)
对比alphas的创建逻辑,你正确调用了get_alpha()(带括号),但get_beta_prelim这里没加括号,导致传递的是函数对象而非计算结果。
修复后的代码
只需要给get_beta_prelim加上括号,让它执行并返回结果:
get_pi_ij <- function() { alphas <- matrix(get_alpha(), nrow = length(get_alpha()), ncol = length(get_alpha()), byrow = FALSE) betas <- matrix(get_beta_prelim(), # 补上括号,调用函数获取返回值 nrow = length(get_beta_prelim()), ncol = length(get_beta_prelim()), byrow = TRUE) pi_ij <- exp(alphas + betas + gamma * c) return(pi_ij) } get_pi_ij()
额外优化建议
当前代码里get_alpha()和get_beta_prelim()被重复调用多次,可以先把结果存到变量里,既提升效率又让代码更简洁:
get_pi_ij <- function() { alpha_vals <- get_alpha() beta_vals <- get_beta_prelim() len <- length(alpha_vals) alphas <- matrix(alpha_vals, nrow = len, ncol = len, byrow = FALSE) betas <- matrix(beta_vals, nrow = len, ncol = len, byrow = TRUE) pi_ij <- exp(alphas + betas + gamma * c) return(pi_ij) } get_pi_ij()
内容的提问来源于stack exchange,提问作者Victor Nielsen
相关产品推荐
相关产品推荐

