2
我希望从矩阵序列中添加元素。例如,将文本字符串转换为矩阵
d <- ifelse(i == 4, matrix1[3,3] + matrix2[3,3] + matrix3[3,3] + matrix4[3,3], matrix5[1,1])
而是写出矩阵的每个序列的我想这可能是更方便的与paste0
创建所需的序列,然后转换所产生的text
来表达,像下面。我认为这会使代码概括变得容易,可能允许在某个点包含可变数量的矩阵。
#
# http://stackoverflow.com/questions/8196109/how-to-convert-a-string-in-a-function-into-an-object
# http://stackoverflow.com/questions/1743698/r-eval-expression
#
z <- eval(parse(text=paste0('matrix',1:4,'[3,3]')), env=.GlobalEnv)
z
但是,上述示例仅返回元素matrix4[3,3]
。
我曾尝试没有成功如下添加sum
函数修改上面的表达式:
eval(parse(text=c('sum(', paste0('matrix',1:4,'[3,3]'), ')')), env=.GlobalEnv)
eval(sum(parse(text=c(paste0('matrix',1:4,'[3,3]')))), env=.GlobalEnv)
感谢您对如何使这项工作的任何建议。也许有一个更简单的方法。
下面是一个全功能的例子:
matrix1 = matrix(c( 1, 2, 3,
4, 5, 6,
7, 8, 9), nrow=3, byrow=TRUE)
matrix2 = matrix(c( 10, 20, 30,
40, 50, 60,
70, 80, 90), nrow=3, byrow=TRUE)
matrix3 = matrix(c( 100, 200, 300,
400, 500, 600,
700, 800, 900), nrow=3, byrow=TRUE)
matrix4 = matrix(c(1000, 2000, 3000,
4000, 5000, 6000,
7000, 8000, 9000), nrow=3, byrow=TRUE)
matrix5 = matrix(c(10000, 20000, 30000,
40000, 50000, 60000,
70000, 80000, 90000), nrow=3, byrow=TRUE)
i <- 1:4
a <- b <- c <- d <- rep(NA,4)
a <- ifelse(i == 1, matrix1[1,1] , matrix2[1,1])
b <- ifelse(i == 2, matrix1[2,2] + matrix2[2,2] , matrix3[1,1])
c <- ifelse(i == 3, matrix1[2,2] + matrix2[2,2] + matrix3[2,2] , matrix4[1,1])
d <- ifelse(i == 4, matrix1[3,3] + matrix2[3,3] + matrix3[3,3] + matrix4[3,3], matrix5[1,1])
a
#[1] 1 10 10 10
b
#[1] 100 55 100 100
c
#[1] 1000 1000 555 1000
d
#[1] 10000 10000 10000 9999
# z should equal 9999 not 9000
z <- eval(parse(text=paste0('matrix',1:4,'[3,3]')), env=.GlobalEnv)
z
也许'的eval(解析(文本=膏( '矩阵',1::可以很容易地使用
abind
结合矩阵一起成阵列4, '[3,3]',九月= “”,崩=“+”)))' – akrun 2015-03-03 12:10:47@akrun谢谢。考虑张贴作为答案,我会upvote它,并可能在一两天内接受它。 – 2015-03-03 12:15:52