You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggplot绘制双参数projection函数报错:k参数缺失,如何解决?

解决方案

1. 修正projection函数的输出

你的projection函数当前返回的是包含多个元素的列表,无法直接用于绘图。需要修改它的返回值,让它输出投影后的数值向量:

projection <- function(x,k) {
  delta <- (max(x)-min(x))/(k-2)
  n <- length(x)
  t <- seq(from = min(x)-2*delta, 
           to = max(x)-delta, 
           length.out = k)
  Z <- matrix(NA, 
              nrow = n, 
              ncol = k)
 for (i in 1:nrow(Z)) {
   for (j in 1:ncol(Z)) {
     Z[i,j] <- bspline(x[i] - t[j], delta=delta)
   }
 }
  # 计算投影矩阵P
  Zt <- t(Z)
  ZtZ <- crossprod(Z)
  Ztz.inv <- solve(ZtZ)
  P <- Z%*%Ztz.inv%*%Zt
  # 返回投影后的数值向量(而非列表)
  return(as.vector(P %*% x))
}

2. 在stat_function中传入k参数

stat_function默认只会给目标函数传入x参数,因此需要用匿名函数包装projection,把k参数固定传入:

library(ggplot2)

# 构造绘图用的x数据
x_data <- data.frame(x = seq(-1, 4, length.out=250))

ggplot(x_data, aes(x=x)) + 
  stat_function(fun = function(x) projection(x, k=4)) +  # 用匿名函数传递k参数
  labs(y= "Py", x = "x") 

额外注意

确保你已经定义了bspline函数,否则代码会因找不到该函数报错;如果bspline属于某个R包,请先加载对应包。


内容的提问来源于stack exchange,提问作者Dome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:35:20