所以我在ggplot2中使用nls绘制功率曲线代码如下:
mass <- c(4120,4740,5550,5610,6520,6870,7080,8500,8960,10350,10480,10550,11450,11930,12180,13690,13760,13800,14050,14700,15340,15790,15990,17300,18460,18630,18650,20050,23270,24530,25030,27540,28370,33460,33930,34450,34500)
solv_acc <- c(2760,2990,2990,3180,3900,4010,4140,4680,4750,5330,4980,5860,5930,5570,5910,6790,6690,7020,6240,6620,6600,6860,7940,7600,8250,8530,7410,9160,9140,10300,10440,10390,11020,12640,11920,12110,12650)
df <- data.frame(Mass=log(mass),Solv=log(solv_acc))
plotter <- (ggplot(df, aes(x=Mass, y=Solv)) + geom_point(shape=1) + stat_smooth(method = "nls", formula = y~i*x^z, start=list(i=1,z=0.2)))
plotter <- plotter + labs(x = "Mass kDa" ,y = "Solvent Accessibility")
print(plotter)
Run Code Online (Sandbox Code Playgroud)
运行上面的代码我收到以下错误:
Error in pred$fit : $ operator is invalid for atomic vectors
Run Code Online (Sandbox Code Playgroud)
我假设它尝试使用时发生错误predict()?
当我nls在同一数据帧上不使用ggplot2 执行时,我没有收到错误
> nls1=nls(Solv~i*Mass^z,start=list(i=1,z=0.2),data=df)
> predict(nls1)
[1] 7.893393 7.997985 8.115253 8.123230 8.234519 8.273135 8.295350 8.429871 8.468550 8.574147 8.583270 8.588134 8.647895 8.677831 8.692939 8.777944 8.781648 8.783757 …Run Code Online (Sandbox Code Playgroud)