简体   繁体   English

使用 eval(parse(text=…))) 将 object 保存到 RData

[英]Save object to RData using eval(parse(text=…)))

I am able to write an object to a.csv file using eval(parse(text=...))) but cannot save to an.RData file.我可以使用eval(parse(text=...)))将 object 写入 a.csv 文件,但无法保存到 .RData 文件。 Why is that?这是为什么? Any suggested workarounds?任何建议的解决方法?

# Assign value to variable name (in my function this variable name changes)
varName <- "test"
assign(x=varName,value=mtcars)

# Check variable exists
head(test)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

# Save .csv
write.csv(eval(parse(text = varName)), file=paste0(varName, ".csv") # works

# Save .RData
save(eval(parse(text = varName)), file=paste0(varName, ".RData")) # doesn't work

>  Error in save(eval(parse(text = varName)), file = paste0(varName, ".RData")) : 
  object ‘eval(parse(text = varName))’ not found

The answer, aside from fortune(106) is to investigate: execute答案,除了fortune(106)是调查:执行

eval(parse(text = varName))

to see what class the returned object is.查看返回的 object 是什么 class 。 Compare with what save requires.save所需的内容进行比较。

That will show, as the other comments and answer does/did that you need a character object for that argument in save .这将表明,正如其他评论和答案所做/所做的那样,您需要一个字符 object 用于save中的该参数。

I think the easiest way to do this is to use我认为最简单的方法是使用

save(list = varName, file = paste0(varName, ".RData"))

It saves having to get (or mget ) the variable(s), as save effectively does it for you.它不必get (或mget )变量,因为save有效地为您完成了它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM