替代R中的for循环

时间:2016-04-27 11:26:54

标签: r for-loop dplyr

我有这个脚本:

x<-seq(1,5)
y<-seq(6,10)
z<-sample(25)
x.range <- range(x)  
y.range <- range(y)
df <- expand.grid(x = seq(from = x.range[1], to = x.range[2], by = 1), y = seq(from = y.range[1], 
                                                                                 to = y.range[2], by = 1))
df$z<-z

x1<-c(1,2,3)
y1<-c(6,7,8)
z1<-c(10,12,13)
df_1<-data.frame(x1,y1,z1)
n<-length(df_1$x1)
df_pred<-data.frame(0,0,0)
names(df_pred)[1:3] <- c("x", "y", "z_pred")

for(i in 1:n)
{df_pred[i,]<-filter(df, x==df_1$x1[i], y==df_1$y1[i])}
sqm <- mean((df_pred[,3]-df_1[,3])^2)

我想计算df的z值和df_1的z1值之间的二次误差。为此,我使用循环从df中提取我需要的行,基于df_1的x1和y1值。 我问你是否有不同的东西for循环,做同样的事情(例如,使用dplyr包)。感谢。

2 个答案:

答案 0 :(得分:1)

如果您将df_1的列命名为&#34; x&#34;,&#34; y&#34;和&#34; z&#34;类似于df,那么你可以使用

df_1 <- data.frame(x=x_1,y=y_1,z=z_1)
library(dplyr)
inner_join(df,df_1,by=c("x","y"))

答案 1 :(得分:0)

我不确定你的循环是什么,但你想尝试这个。我用它来代替你的循环。

df_pred <- subset(df, x %in% df_1$x1 & y %in% df_1$y1)

如果它能解决您的问题,请告诉我