3

一連の数値のプロットを作成し、回帰直線を追加する関数を書きたいと思います。今のところ、まだプロットを作成できますが、プロットでエラーが発生するか、何らかの Null 応答が発生します。

null を返さない回帰直線のない関数は次のようになります。

fun<-function(){
+   x<-c(1,2,3,4,5)
+   y<-c(1,2,3,4,5)
+   LR<-lm(x~y)
+   
+   return(plot(x,y))
+ }
> fun()

結果としてプロットだけでナイス・アンド・プリティ

回帰直線をプロットに追加すると、プロットは表示されますが、null 応答も返されます

> fun<-function(){
+   x<-c(1,2,3,4,5)
+   y<-c(1,2,3,4,5)
+   LR<-lm(x~y)
+   p<-plot(x,y)
+   a<-abline(LR)
+   return(p)
+ }
> fun()
NULL

またはエラー

> fun<-function(){
+   x<-c(1,2,3,4,5)
+   y<-c(1,2,3,4,5)
+   
+   LR<-lm(x~y)
+   
+   p<-plot(x,y)
+   a<-abline(LR)
+   
+   return(p,a)
+ }
> fun()
Error in return(p, a) : multi-argument returns are not permitted

または 2 つのヌル

> fun<-function(){
+   x<-c(1,2,3,4,5)
+   y<-c(1,2,3,4,5)
+   
+   LR<-lm(x~y)
+   
+   p<-plot(x,y)
+   a<-abline(LR)
+   
+   return(list(p,a))
+ }
> fun()
[[1]]
NULL

[[2]]
NULL

これがとてつもなくうるさいと思われる場合は申し訳ありませんが、実際のデータセットでは醜くなる可能性があります。

4

2 に答える 2

4

これはあなたが望むことをしますか?

fun <- function(x, y) {
  plot(x, y)
  abline(lm(x~y))
}

fun(1:10, 10:1)

さらに操作するためにプロット オブジェクトが返されることを期待している場合は、以下を使用できますggplot

fun <- function(df) {
  ggplot(df, aes(X, y)) + geom_point()
}

df <- data.frame(x=1:10, y=10:1)
p <- fun(df)

# examine p
str(p)

# plot p
p
于 2012-06-15T22:29:16.313 に答える
4

プロット オブジェクトを返す関数が本当に必要ですか? それとも、直接プロットするだけで十分ですか?

私はそのようなもののためにggplot2にはまっています。この関数は両方を行います (プロットを出力し、オブジェクトとして返します)。

fun <- function(dataset){
  require(ggplot2)
  p <- ggplot(dataset, aes(x = x, y = y)) + geom_smooth(method = "lm") + geom_point()
  print(p)
  return(p)
}

p1 <- fun(data.frame(x = c(1,2,3,4,5), y = rnorm(5)))
p1
于 2012-06-15T22:30:57.850 に答える