为每行和上一行查找R^2

为每行和上一行查找R^2,r,loops,for-loop,R,Loops,For Loop,我有一个X-Y表,希望找到所有行的R^2值,然后减去一行并再次执行该函数。 我从这个函数开始: df<-data.frame(x=1:10,y=1:10) R2<-function(df) for(i in length(df$x)){ Rsq<-lm(x ~ y, data=df) print(Rsq) } 所以这给了我整个数据帧的R^2,我似乎不知道如何通过每次减去一行来连续执行函数 假设需要的是求y[-1]对x[-2],y[-2]对x[-2]的R平方,等等

我有一个X-Y表,希望找到所有行的R^2值,然后减去一行并再次执行该函数。 我从这个函数开始:

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

R2<-function(df)
  for(i in length(df$x)){
  Rsq<-lm(x ~ y, data=df)
  print(Rsq)
}

所以这给了我整个数据帧的R^2,我似乎不知道如何通过每次减去一行来连续执行函数

假设需要的是求y[-1]对x[-2],y[-2]对x[-2]的R平方,等等

sapply(1:nrow(df), function(i) summary(lm(y ~ x, df, subset = -i))$r.squared)
注意,我们可以通过在上面的代码中将R.squared替换为adj.R.squared来获得调整后的R.squared

如果你真的想写一个循环,它连续地打印R的平方值,那么它会这样做:

R2 <- function(df) {
  for(i in 1:nrow(df)) {
    Rsq <- summary(lm(x ~ y, data = df, subset = -i))$r.squared
    print(Rsq)
  }
}
R2(df)

有几件事。1.函数代码应该放在花括号中。2.检查lengthdf$x中的fori是否真的迭代了您认为它迭代的内容,并在R.3中的for循环中读取一些内容。您正在打印模型,没有返回任何内容。编辑了花括号-打字错误的代码。实际上,长度为$x{print i}的fori只连续给出行数。我很困惑。谢谢你的评论,感谢你对我的代码进行了有益的修改和编辑。这有所帮助。但是,您对我的代码进行的编辑返回一个错误:忽略额外参数“ssubset”。它会打印一个结果,但只打印一个R^2值。如果您键入的代码不是子集而是ssubset,则会出错。