我有这个feature_list,其中包含几个可能的值,比如“A”,“B”,“C”等。还有time_list中的时间。
所以我将有一个循环,我想要遍历这些不同的值并将其放在公式中。
类似于for(i in ...)
,然后是my_feature <- feature_list[i]
和my_time <- time_list[i]
。
然后我将时间和所选特征放入数据框以用于回归
feature_list<- c("GPRS")
time_list<-c("time")
calc<-0
feature_dim <- length(feature_list)
time_dim <- length(time_list)
data <- read.csv("data.csv", header = TRUE, sep = ";")
result <- matrix(nrow=0, ncol=5)
errors<-matrix(nrow=0, ncol=3)
for(i in 1:feature_dim) {
my_feature <- feature_list[i]
my_time <- time_list[i]
fitdata <- data.frame(data[my_feature], data[my_time])
for(j in 1:60) {
my_b <- 0.0001 * (2^j)
for(k in 1:60) {
my_c <- 0.0001 * (2^k)
cat("Feature: ", my_feature, "\t")
cat("b: ", my_b, "\t")
cat("c: ", my_c, "\n")
err <- try(nlsfit <- nls(GPRS ~ 53E5*exp(-1*b*exp(-1*c*time)), data=fitdata, start=list(b=my_b, c=my_c)), silent=TRUE)
calc<-calc+1
if(class(err) == "try-error") {
next
}
else {
coefs<-coef(nlsfit)
ess<-deviance(nlsfit)
result<-rbind(result, c(coefs[1], coefs[2], ess, my_b, my_c))
}
}
}
}
现在在nls()
通话中,我希望能够调用my_feature而不仅仅是“A”或“B”或其他内容,然后再调用列表中的下一个。但我在那里得到一个错误。我做错了什么?
答案 0 :(得分:2)
您可以使用粘贴创建公式的字符串版本,包括所需的变量名称,然后使用as.formula
或formula
函数将其转换为公式以传递给nls。
as.formula(paste(my_feature, "~ 53E5*exp(-1*b*exp(-1*c*time))"))
另一个选择是使用bquote函数将变量名称插入到函数调用中,然后eval函数调用。
答案 1 :(得分:0)
我刚刚和R一起工作过,也许你可以尝试一下:
你想要的是创建一个包含变量列表的公式吗?
因此,如果响应变量是列表的第一个元素而其他元素是解释变量,那么您可以这样创建公式:
my_feature [0] ~reduce(“+”,my_feature [1:])。这可能有用。
这样你就可以创建依赖于my_features中变量的公式。