【发布时间】:2015-10-27 14:19:05
【问题描述】:
我想将一系列结果分配给一系列变量,然后将这些变量保存在一系列 .Rdata 文件中。我想这样做是为了在需要时使用 sapply 加载所有 .Rdata 文件。
为了说明我的问题,我写了一个简单的函数save.try1,并运行了5次。
save.try1 = function(x){
M = matrix(c(x,x+1,x+2,x+3), ncol=2, nrow = 2)
filename = paste('/Volumes/GIORDANO 3/MTS/MTS - essai/matrice', x, '.Rdata', sep='')
save(M, file =filename)
}
sapply(1:5, save.try1)
我的文件夹 MTS - essai 中现在有 5 个名为 matrice1.Rdata, ... , matrice5.Rdata 的 .Rdata 文件。
现在,当我在 R 中加载文件时,我得到:
> matrices.chargees = sapply(1:5, function(x) load(file = paste('/Volumes/GIORDANO 3/MTS/MTS - essai/matrice', x, '.Rdata', sep='')))
> matrices.chargees
[1] "M" "M" "M" "M" "M"
而且我无法打开任何 M 矩阵:
> matrices.chargees[[2]]
[1] "M"
> matrices.chargees[2]
[1] "M"
> matrices.chargees$M
Error in matrices.chargees$M : $ operator is invalid for atomic vectors
首先,我想为每个矩阵指定不同的名称。我读了以下帖子:
how to assign a sequence of computations to a sequence of variables in r
我尝试将代码更改为:
save.try1 = function(x){
M = matrix(c(x,x+1,x+2,x+3), ncol=2, nrow = 2)
assign(paste('M', x, sep =''), M)
filename = paste('/Volumes/GIORDANO 3/MTS/MTS - essai/matrice', x, '.Rdata', sep='')
save(paste('M', x, sep =''), file =filename)
}
但我收到以下错误:
> sapply(1:5, save.try1)
Error in save(paste("M", x, sep = ""), file = filename) :
object ‘paste("M", x, sep = "")’ not found
因此,我的问题如下:
1- 如何修改我的代码以使每个矩阵具有不同的名称? 2- 这可以让我访问每个矩阵的内容吗?如果没有,我该如何访问它?
谢谢!
【问题讨论】:
-
不要使用
assign。只需制作一个列表并使用[[分配:mylist <- list(); mylist[[myname]] <- mything_for_myname。我怀疑您是否需要保存在函数中;只需在填充后保存mylist,或者如果必须保存在循环中。我想重要的是你可以在[[]]中输入一个数字或一个名字
标签: r