访问由paste定义的矩阵(字符串)

时间:2013-09-24 15:05:47

标签: r

我通过将基于for循环的县值粘贴到单词矩阵来创建了一个系列矩阵。这很有效:

assign(paste("matrix",sort(unique(data$county), decreasing=FALSE)[k],sep=""), matrix(0,100,100))

我现在想要写入此矩阵中的不同单元格,但不能。这失败了:

assign(paste("matrix",sort(unique(data$county), decreasing=FALSE)[k],sep="")[j,i],1)

错误在paste()中,因为它具有“不正确的维数”,因为粘贴产生了一个向量而[j,i]正试图将其作为矩阵访问。我试图将我的粘贴包装在get(),eval()等中,但只是得到了不同的错误。

所以问题是如何让这个字符串返回为我可以用[j,i]访问的矩阵?

2 个答案:

答案 0 :(得分:0)

您可以改为使用此代码方案:

保存一个县列表,按您的需要排序(decreasing=FALSE是默认值):

counties <- sort(unique(as.character(data$county)))

为每个县创建归零矩阵:

matrices <- sapply(counties, function(.)matrix(0,100,100), simplify=FALSE)

写入特定单元格:

matrices[[counties[k]]][j,i] <- 1

注意:我添加as.character()只是为了避免因素问题。

答案 1 :(得分:0)

作为贾斯汀在评论中的意思的一个例子,试试这个。

counties <- c("Nottinghamshire", "Derbyshire", "Leicestershire")
data_by_county <- replicate(
  length(counties), 
  matrix(0, 3, 4), 
  simplify = FALSE
)
names(data_by_county) <- counties
data_by_county
## $Nottinghamshire
##      [,1] [,2] [,3] [,4]
## [1,]    0    0    0    0
## [2,]    0    0    0    0
## [3,]    0    0    0    0
## 
## $Derbyshire
##      [,1] [,2] [,3] [,4]
## [1,]    0    0    0    0
## [2,]    0    0    0    0
## [3,]    0    0    0    0
## 
## $Leicestershire
##      [,1] [,2] [,3] [,4]
## [1,]    0    0    0    0
## [2,]    0    0    0    0
## [3,]    0    0    0    0