在r中将字符串转换回对象

在r中将字符串转换回对象,r,binary,lm,R,Binary,Lm,在R中,我将二进制文件的内容作为字符串获取(由于设计问题,我无法直接访问该文件) 该文件最初是一个lm模型 如何将该字符串转换回lm模型 谢谢我假设您根据以下示例使用了base::dput()(基于): #在一些数据上生成一些模型 数据那个二进制文件是什么样的?您从文件中获得的字符串是什么样子的?一长串字母数字字符您使用了什么方法来保存/序列化模型(dput,save,saveRDS,serialize)?如果最初使用saveRDS而不是dput呢?@elfersi,那么您将无法将其作为字符串键

在R中,我将二进制文件的内容作为字符串获取(由于设计问题,我无法直接访问该文件)

该文件最初是一个lm模型

如何将该字符串转换回lm模型


谢谢

我假设您根据以下示例使用了
base::dput()
(基于):

#在一些数据上生成一些模型

数据那个二进制文件是什么样的?您从文件中获得的字符串是什么样子的?一长串字母数字字符您使用了什么方法来保存/序列化模型(dput,save,saveRDS,serialize)?如果最初使用saveRDS而不是dput呢?@elfersi,那么您将无法将其作为字符串键入,好吗@李哲源 因为这正是作者所要求的,一种将模型作为字符串加载到源代码中的方法,而不必从磁盘加载。如果我有一个lm模型的列表对象(而不是单个lm模型对象),我必须分别输出每个lm模型吗?或者,有没有办法将它们全部作为一个文件输出,然后将它们转换回一个lm模型?@elfersi如果您以后能够访问此文件,则可以使用
save()
将它们保存在一个文件中,或者使用
saveRDS()
将它们保存在一个单独的文件中。但是如果字符串是必需的,就像在最初的文章中一样,那么您可以尝试将它们与
dput(list(model1,model2),…)一起保存。
。然而,如果不把它们绑在一起,它已经够乱的了,所以我会把它们放在各自的字符串中。
# Generate some model over some data
data <- sample(1:100, 30)
df <- data.frame(x = data, y = 2 * data + 20)
model <- lm(y ~ x, df)

# Assuming this is what you did you have the model structure inside model.R
dput(model, control = c("quoteExpressions", "showAttributes"), file = "model.R")


# ----- This is where you are, I presume -----
# So you can copy the content of model.R here (attention to the single quotes)
mstr <- '...'

# Execute the content of mstr as a piece of code (loading the model)
model1 <- eval(parse(text = mstr))

# Parse the formulas
model1$terms <- terms.formula(model1$terms)


# ----- Test it -----
# New data
df1 <- data.frame(x = 101:110)

pred <- as.integer(predict(model, df1))
pred1 <- as.integer(predict(model1, df1))

identical(pred, pred1)
# [1] TRUE


model
# 
# Call:
# lm(formula = y ~ x, data = df)
# 
# Coefficients:
# (Intercept)            x  
#          20            2  
# 

model1
# 
# Call:
# lm(formula = y ~ x, data = df)
# 
# Coefficients:
# (Intercept)            x  
#          20            2  

# Check summary too (you'll see some minor differences)
# summary(model)
# summary(model1)