簡體   English   中英

組合字符串以指向R中的對象

[英]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$p1stuff[["p1"]] (如果它們具有名稱),也可以訪問數字索引,例如stuff[[1]] 您可以使用例如一次添加或更改所有名稱。 names(stuff)<-paste0("p",1:9)或為所有具有lapply(stuff, colMeans)元素計算列均值。 簡而言之,您可以使用列表執行許多有用的操作,而使用工作空間中的單獨對象將使列表變得更加復雜且可靠性降低。

我認為您正在尋找的功能是evalas.name結合:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM