为数据帧分配新名称并将其另存为R中的单独对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为数据帧分配新名称并将其另存为R中的单独对象相关的知识,希望对你有一定的参考价值。
我在R中执行一组分析。分析的流程是在数据框(即input_dataframe
)中读取,执行一组计算,然后生成一个新的,更小的数据框(称为final_result
)。对23个不同的文件执行一组精确计算,每个文件包含一个数据帧。
我的问题如下:对于每个读入的文件(即23个文件),我试图保存一个唯一的R对象:我该怎么做?当我保存生成的final_result
数据帧(使用save()
到R对象时,我无法将所有23个对象读入新的R会话而不会让不同的R对象相互覆盖。其他建议(例如Create a variable name with "paste" in R?)对我不起作用,因为它们依赖于这样一个事实:一旦分配了新的变量名,你就可以通过它的名称调用那个新变量,在这种情况下我不能这样做。
总结/重写:有没有办法在R中保存对象但是更改对象的名称以便以后加载它?例如:
x=5
magicSave(x,file="saved_variable_1.r",to_save_as="result_1")
x=93
magicSave(x,file="saved_variable_2.r",to_save_as="result_2")
load(saved_variable_1)
load(saved_variable_2)
result_1
#returns 5
result_2
#returns 93
答案
在R
中,将列表中的所有内容存储为列表通常是一个好主意。之后它会让一切变得更加优雅。
首先,将所有路径放在列表或向量中:
paths <- c("C:/somewhere/file1.csv",
"C:/somewhere/file2.csv") # etc
然后你读它们:
objects <- lapply(paths,read.csv) # objects is a list of tables
然后在每个元素上应用转换:
output <- lapply(objects,transformation_function)
然后你可以保存输出(我发现saveRDS
比save
更干净,因为你知道在加载时你将在工作区中邀请哪些变量):
saveRDS(output,"C:/somewhere/output.RDS")
您将加载
output <- readRDS("C:/somewhere/output.RDS")
或者,如果您出于某种原因希望另存为不同的对象:
output_paths <- paste0("C:/somewhere/output",seq_along(output),".csv")
Map(saveRDS,output,output_paths)
要稍后加载:
output <- lapply(readRDS,paths)
另一答案
x=5
write.csv(x,"one_thing.csv", row.names = F)
x=93
write.csv(x,"two_thing.csv", row.names = F)
result_1 <- read.csv("one_thing.csv")
result_2 <- read.csv("two_thing.csv")
result_1
# x
# 1 5
result_2
# x
# 1 93
以上是关于为数据帧分配新名称并将其另存为R中的单独对象的主要内容,如果未能解决你的问题,请参考以下文章