R中的for循环 - 生成不同的图形
for loop in R - generate different graphics
如果我有一组不同样本的数据 (x) 和一个固定的 y,例如:
> x1 <- c(5,6,7,8)
> x2 <- c(9,7.8,6,8)
> x3 <- c(7,3,5,1)x
> y <- c(20,21,20,50)
如果我想尝试绘制这些数据,例如 (x1 ~ y)、(x2 ~ y)、(x3 ~ y)
> x_data <- data_frame(x1, x2, x3)
>
> for (i in seq_along(x_data)) {
> model <- lm(x_data[i] ~ y)
> plot(model)
> }
但是,这不起作用,我收到以下错误:
Error in model.frame.default(formula = x_data[i] ~ y, drop.unused.levels = TRUE) :
variable lengths differ (found for 'x_data')
我正在尝试描绘它们以检查是否存在对值的依赖性。
我们可以用 paste
创建公式
par(mfrow = c(3, 4))
for (i in seq_along(x_data)) {
model <- lm(as.formula(paste(names(x_data)[i], "~ y")), data = x_data)
plot(model)
}
或 reformulate
par(mfrow = c(3, 4))
for (i in seq_along(x_data)) {
model <- lm(reformulate("y", response = names(x_data)[i]), data = x_data)
plot(model)
}
考虑 reformulate
并将所有向量绑定到数据框中以与 lm
的 data
参数一起使用:
model_data <- data.frame(y, x1, x2, x3)
# ITERATE ACROSS COLUMN NAMES, IGNORING FIRST
for (x in colnames(model_data[-1])) {
model <- lm(reformulate("y", response=x), data=model_data)
plot(model)
}
如果我有一组不同样本的数据 (x) 和一个固定的 y,例如:
> x1 <- c(5,6,7,8)
> x2 <- c(9,7.8,6,8)
> x3 <- c(7,3,5,1)x
> y <- c(20,21,20,50)
如果我想尝试绘制这些数据,例如 (x1 ~ y)、(x2 ~ y)、(x3 ~ y)
> x_data <- data_frame(x1, x2, x3)
>
> for (i in seq_along(x_data)) {
> model <- lm(x_data[i] ~ y)
> plot(model)
> }
但是,这不起作用,我收到以下错误:
Error in model.frame.default(formula = x_data[i] ~ y, drop.unused.levels = TRUE) :
variable lengths differ (found for 'x_data')
我正在尝试描绘它们以检查是否存在对值的依赖性。
我们可以用 paste
par(mfrow = c(3, 4))
for (i in seq_along(x_data)) {
model <- lm(as.formula(paste(names(x_data)[i], "~ y")), data = x_data)
plot(model)
}
或 reformulate
par(mfrow = c(3, 4))
for (i in seq_along(x_data)) {
model <- lm(reformulate("y", response = names(x_data)[i]), data = x_data)
plot(model)
}
考虑 reformulate
并将所有向量绑定到数据框中以与 lm
的 data
参数一起使用:
model_data <- data.frame(y, x1, x2, x3)
# ITERATE ACROSS COLUMN NAMES, IGNORING FIRST
for (x in colnames(model_data[-1])) {
model <- lm(reformulate("y", response=x), data=model_data)
plot(model)
}