[英]Combining strings to point to objects in R
我已經在尋找這個答案好幾個星期了,它必須在這里,但在任何地方都找不到!
有沒有一種組合字符串和數字以指向對象的方法? 基本上我有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,而不是指向對象。
還有其他方法嗎?
謝謝!
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]]
通常,一個列表中會包含以下9個對象:
stuff <- list(p1, p2, etc)
要以隨機順序訪問它們:
stuff[sample(1:9)] # permuted
這比擺弄eval,get和他們的朋友要容易得多。 所有您需要學習的是btw [
, [[
和$
(訪問列表元素的方式)。
此外,列表元素可以具有名稱,但這不是必須的。 您可以按名稱訪問stuff$p1
,例如stuff$p1
或stuff[["p1"]]
(如果它們具有名稱),也可以訪問數字索引,例如stuff[[1]]
。 您可以使用例如一次添加或更改所有名稱。 names(stuff)<-paste0("p",1:9)
或為所有具有lapply(stuff, colMeans)
元素計算列均值。 簡而言之,您可以使用列表執行許多有用的操作,而使用工作空間中的單獨對象將使列表變得更加復雜且可靠性降低。
我認為您正在尋找的功能是eval
與as.name
結合:
> P1 = "p1 object"
> a = paste("P",1,sep="")
> eval(as.name(a))
[1] "p1 object"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.