我几周来一直在寻找这个答案,它必须在这里,但无法在任何地方找到它!
有没有办法将字符串和数字组合起来指向对象?基本上我有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而不是指向对象。
还有其他方法吗?
谢谢!
答案 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$p1
或stuff[["p1"]]
(如果他们有姓名)或stuff[[1]]
等数字索引访问元素。您可以使用例如一次添加或更改所有名称。 names(stuff)<-paste0("p",1:9)
或计算所有lapply(stuff, colMeans)
元素的列均值。简而言之,您可以使用列表执行许多有用的操作,在工作区中使用单独的对象实现这些操作会更复杂,也更不可靠。
答案 2 :(得分:0)
我认为您要查找的功能是eval
与as.name
结合使用:
> P1 = "p1 object"
> a = paste("P",1,sep="")
> eval(as.name(a))
[1] "p1 object"