我想运行一个循环,它将根据其中一个变量的每个类别运行,并根据每个回归产生一个预测,以便预测变量的总和将从目标变量中推导出来。这是我的玩具数据和代码:
df <- read.table(text = "target birds wolfs snakes
3 9 7 a
3 8 4 b
1 2 8 c
1 2 3 a
1 8 3 a
6 1 2 a
6 7 1 b
6 1 5 c
5 9 7 c
3 8 7 c
4 2 7 b
1 2 3 b
7 6 3 c
6 1 1 a
6 3 9 a
6 1 1 b ",header = TRUE)
我写了这个代码(下面),它的目的是得到上面写的计算结果,但我得到了一个错误:
以下是代码:
b <- list()
for(i in c("a","b",'c')){
lmModel <- lm(target ~ birds+wolfs, data = subset(df, snakes == i) )
b[i] <- sum(predict(lmModel,newdata=subset(df, snakes == i))) - sum(df$target[which(df$snakes=='a'),])
}
b <- as.numeric(b)
b
我收到了这个错误:
Error in df$target[which(df$snakes == "a"), ] : incorrect number of dimensions
我该如何解决这个问题?
答案 0 :(得分:1)
问题来自于您在此处混合使用子集类型:// Update the orientation on the movie file output video connection before starting recording.
[[[self movieFileOutput] connectionWithMediaType:AVMediaTypeVideo] setVideoOrientation:(AVCaptureVideoOrientation)[UIDevice currentDevice].orientation];
使用df$target[which(df$snakes=='a'),]
后,输出不再是data.frame,并且两个参数$
子集不再有效。最好将其压缩为:
[
至于你的模型,你可以创建一个sum(df[df$snakes=="a","target"])
[1] 23
作为协变量的模型,并使用其中的预测来对蛇群进行求和:
snakes
获取lm(target~birds+wolfs+snakes+0,df)
Call:
lm(formula = target ~ birds + wolfs + snakes + 0, data = df)
Coefficients:
birds wolfs snakesa snakesb snakesc
-0.08593 -0.23461 5.15458 5.09446 6.25448
tapply(predict(lm(target~birds+wolfs+snakes+0,df)),df$snakes,sum)
a b c
23 20 22
变量的最终输出
b
但请注意,a值存在小的数字差异。
或者,要检查,您可以通过tapply(predict(lm(target~birds+wolfs+snakes+0,df)),df$snakes,sum) - sum(df[df$snakes=="a","target"])
a b c
1.776357e-14 -3.000000e+00 -1.000000e+00
的参数指定数据子集:
lm