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
相关产品推荐
相关产品推荐

