2012-03-23 25 views
2

推測R知道在運行* apply函數時正在處理的列表中的哪個成員,或者一個向量的元素,或者一行矩陣等。是否有可能使用該指數的功能,而不訴諸一些解決方法是這樣的:當使用* apply函數時,識別正在處理哪個元素

fruit <- c("Bananas", "Oranges", "Avocados", "Celeries?") 
sapply(fruit, function(x) 
    paste(x, "are fruit number", which(fruit==x))) 

或其他解決方法,例如these張貼在參考過類似的問題?

希望[毫無結果?]爲更優雅的東西。

+0

您可以給'fruit'屬性並在'apply'(family)函數內調用它。請參閱這裏的用法:http://stackoverflow.com/questions/4164960/which-list-element-is-being-processed-when-using-snowfallsflapply – 2012-03-23 14:36:26

回答

4

我寧願寫

sapply(seq_along(fruit), function(ii) paste(fruit[ii], "are fruit number", ii)) 
+1

是'seq_along()'實質上只是'1短手:長度(水果)'?這樣做的好處在於,'seq_along'是'原始的',因此速度很快。但是最終這不僅僅是使得它成爲一個更加明確的for循環嗎?我想我希望從我的便利循環功能中得到太多,而應該嘗試進行矢量化! – digitalmaps 2012-03-23 10:55:04

+0

如果不是那些干擾孩子的人,他會放棄它。 – 2012-03-23 14:36:49

+0

'seq_along'也更健壯,試試'fruit = c(); seq_along(果實); 1:長度(水果)'。我同意'for'循環是一個有效的選擇,在給定的情況下哪個更清晰可以選擇。 – baptiste 2012-03-23 21:54:18

3

您可以傳遞的,而不是來sapply向量的索引;

fruit <- c("Bananas", "Oranges", "Avocados", "Celeries?") 
sapply(seq_along(fruit), function(x) paste(fruit[x], "are fruit number", x)) 
+0

baptise擊敗30秒 – 2012-03-23 04:15:11

+0

下次選擇水果名稱較短的人:-) – 2012-03-23 11:32:12

+0

我很失望,沒有人注意到芹菜不是水果,而是莖。 – digitalmaps 2012-03-23 13:29:07

2

也許mapply是一個有用的選擇? (儘管這裏並不是真的需要)

fruit <- c("Bananas", "Oranges", "Avocados", "Celeries?") 
mapply(paste, fruit, "are fruit number", seq_along(fruit)) 
相關問題