将字符串组合以指向R中的对象

时间:2014-01-07 17:07:08

标签: arrays r object

我几周来一直在寻找这个答案,它必须在这里,但无法在任何地方找到它!

有没有办法将字符串和数字组合起来指向对象?基本上我有9个对象叫P1,P2,P3等,想要使用9个数字的排列来访问它们。我知道这不起作用,但这是我想要的想法。

xx=sample(c(1,2,3,4,5,6,7,8,9),9,replace=FALSE)
xx[5]
a=paste("P",xx[5],sep="")

我希望对象a现在是对象P5(或者xx [5]是什么数字)。但是粘贴使它成为字符串P5而不是指向对象。

还有其他方法吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

get是您正在寻找的功能。

set.seed(0)
P5 <- "I am P5"
xx=sample(1:9,9,replace=FALSE)
xx[5]
a=paste0("P",xx[5])
get(a)

[1] "I am P5"

get将按名称搜索对象...

附录:关于上面@Konrad Rudolph的问题:您可以将矩阵存储在列表对象中。这通常是要走的路,而不是弄乱工作区。

l <- list()
l[[1]] <- matrix(1:9, 3) 
l[[2]] <- matrix(9:1, 3) 

再次获得矩阵:

l[[1]] 

答案 1 :(得分:1)

通常会在列表中包含这9个对象:

stuff <- list(p1, p2, etc)

以随机顺序访问它们:

stuff[sample(1:9)] # permuted

这比摆弄eval,get和他们的朋友容易得多。您需要学习的只是btw [[[$(访问列表&#39;元素的方式)的区别。

此外,列表元素可以有名称,但这不是强制性的。您可以按名称stuff$p1stuff[["p1"]](如果他们有姓名)或stuff[[1]]等数字索引访问元素。您可以使用例如一次添加或更改所有名称。 names(stuff)<-paste0("p",1:9)或计算所有lapply(stuff, colMeans)元素的列均值。简而言之,您可以使用列表执行许多有用的操作,在工作区中使用单独的对象实现这些操作会更复杂,也更不可靠。

答案 2 :(得分:0)

我认为您要查找的功能是evalas.name结合使用:

> P1 = "p1 object"
> a = paste("P",1,sep="")
> eval(as.name(a))
[1] "p1 object"