是否有可能在飛行中創建新的變量名稱?如何即時命名變量?
我想從列表中讀取數據幀到最後帶有數字的新變量。像orca1,ORCA2,orca3 ...
如果我嘗試像
paste("orca",i,sep="")=list_name[[i]]
我得到這個錯誤
target of assignment expands to non-language object
有沒有解決這個另一種方式?
是否有可能在飛行中創建新的變量名稱?如何即時命名變量?
我想從列表中讀取數據幀到最後帶有數字的新變量。像orca1,ORCA2,orca3 ...
如果我嘗試像
paste("orca",i,sep="")=list_name[[i]]
我得到這個錯誤
target of assignment expands to non-language object
有沒有解決這個另一種方式?
使用分配:
assign(paste("orca",i,sep=""), list_name[[i]])
這是如何做到這一點。這裏有一個元問題,即「我應該這樣做嗎?」答案几乎總是「不」。列表中的命名元素幾乎總是首選。 – 2012-07-20 16:18:06
答案几乎總是「否」,除非不是。 – Shane 2012-08-02 12:33:49
當然好。但是大多數尋求這個答案的人並沒有因拒絕他們的申請表而被拒絕。 – 2012-08-02 13:15:49
在我看來,你可能會用一個列表更好,而不是使用orca1
,orca2
,等等,......那麼這將是orca[1]
,orca[2]
,...
通常情況下,您正在製作一個由數字區分的變量列表,因爲該數字將是稍後訪問它們的便捷方式。
orca <- list()
orca[1] <- "Hi"
orca[2] <- 59
否則,assign
正是你想要的。
我同意。通常當人們認爲他們想立即命名變量時,他們真正想要的是一個不同的數據結構。 – 2010-04-21 05:55:16
+1(FAQ 7.21:http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a-variable_003f)很好地討論了這一點 – 2011-05-19 14:35:14
另一個棘手的解決方案是命名和列表的元素attach
它:
list_name = list(
head(iris),
head(swiss),
head(airquality)
)
names(list_name) <- paste("orca", seq_along(list_name), sep="")
attach(list_name)
orca1
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
棘手,但不明智。如果答案是「附加」,你通常會問錯誤的問題...... – 2011-05-19 14:34:42
不要使數據幀。保留清單,命名其元素,但不要附加它。
這樣做的最大原因是,如果您隨時隨地創建變量,則幾乎總是在稍後必須迭代每個變量才能執行一些有用的操作。在那裏,你將再次被迫迭代你在飛行中創建的每個名稱。
命名列表中的元素並遍歷名稱要容易得多。
就attach而言,它在R中的編程實踐非常糟糕,如果不小心可能會導致很多麻煩。
而這個選項?
list_name<-list()
for(i in 1:100){
paste("orca",i,sep="")->list_name[[i]]
}
它完美地工作。在你放的例子中,第一行缺失,然後給你錯誤信息。
這並沒有解決OP的問題。我們有一個帶有數據框的列表,我們想把它分配給數據框,命名爲orca1,orca2等。 – zx8754 2016-10-27 19:57:02
只要我們發出r-faq標籤,讓我們給出鏈接(FAQ 7.21:http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I -turn-a-string-into-a-variable_003f) – 2011-05-19 14:33:43