【发布时间】:2019-01-28 15:37:15
【问题描述】:
我正在尝试平滑数据框中每个变量的数据。假设它看起来像这样:
data <- data.frame(v1 = c(0.5,1.1,2.9,3.4,4.1,5.7,6.3,7.4,6.9,8.5,9.1),
v2 = c(0.1,0.8,0.5,1.1,1.9,2.4,0.8,3.4,2.9,3.1,4.2),
v3 = c(1.3,2.1,0.8,4.1,5.9,8.1,4.3,9.1,9.2,8.4,7.4))
data$x <- 1:nrow(data)
然后我将我的 x 和 y 变量指定为:
x <- data$x
y <- data$v1
我可以拟合我想要的预测线(我对这个过程很满意):
f <- function (x,a,b,d) {(a*x^2) + (b*x) + d}
order_two <- nls(y ~ f(x,a,b,d), start = c(a=1, b=1, d=1))
co2 <- coef(order_two)
data$order_two_predicted_v1 <- (co2[1] * (data$x)^2) + (co2[2] * data$x) + co2[3]
因此,我最终得到了一个适当命名的新变量(v1 的预测值)。我现在想对我的数据框中的其他 100 个变量(本例中为 v2 和 v3)中的每一个执行此操作。
我尝试使用函数来执行此操作,但无法使其按预期工作。这是我的尝试:
myfunction <- function(xaxis,yaxis){
# Specfiy my "y" and "x"
x <- data$xaxis
y <- data$yaxis
f <- function (x,a,b,d) {(a*x^2) + (b*x) + d}
order_two <- nls(y ~ f(x,a,b,d), start = c(a=1, b=1, d=1))
co2 <- coef(order_two)
data$order_two_predicted_yaxis <- (co2[1] * (data$x)^2) + (co2[2] * data$x) + co2[3]
}
myfunction(x,v1)
myfunction(x,v2)
myfunction(x,v3)
不仅函数不能按预期工作,我还想避免为每个变量调用函数 100 次,而是以某种方式循环遍历它。
这在 SAS 中使用宏非常简单,但我很难让它在 R 中工作。
【问题讨论】:
-
lm(v1 ~ I(x^2) + x + 1, data=data)- 参数 a、b 和 d 是 x²、x 和1. -
lapply(data[, 1:3], function(y) lm(y ~ data$x + I(data$x^2)))为您提供所有模型的列表
标签: r function loops for-loop regression