我有一个包含3列a,b和X的数据框g。我需要将X与a中的每个条目相乘,然后添加到b以创建新变量。现在我正在使用for循环
for(i in 1:N) {
g$Eout[i] = mean((g$a[i]*g$X+g$b[i]-(g$X)^2)^2);
}
在R中真的很慢。无论如何要更快地做到这一点吗?
答案 0 :(得分:2)
试试这个:
set.seed(2)
N <- 30
g <- data.frame(a=1:N,b=seq(1,2,length.out=N),X=seq(10,20,length.out=N))
g$new <- sapply(g$X, function(x) mean((g$a * x + g$b - x^2)^2))
head(g)
# a b X new
# 1 1 1.000000 10.00000 10735.67
# 2 2 1.034483 10.34483 11077.04
# 3 3 1.068966 10.68966 11416.58
# 4 4 1.103448 11.03448 11757.01
# 5 5 1.137931 11.37931 12101.40
# 6 6 1.172414 11.72414 12453.14
由于您希望X
的每个值乘以所有的g$a
等值,您需要求助于某些矢量化优点。 (使用@ thelatemail的建议3e4
每sapply
大约需要7秒...)