就R語言也有類似的名稱和dimnames一些功能,你可以作爲例子給它們賦值:如何賦值函數中的R
x <- list('foo'=2, boo=3)
names(x) # This returns ("foo", "boo") vector
names(x) <- c("moo", "doo") # Changes existing item names to ("moo", "doo")
我的問題是如何這顯然創建這樣的功能,它們充當集合並同時獲得功能。
就R語言也有類似的名稱和dimnames一些功能,你可以作爲例子給它們賦值:如何賦值函數中的R
x <- list('foo'=2, boo=3)
names(x) # This returns ("foo", "boo") vector
names(x) <- c("moo", "doo") # Changes existing item names to ("moo", "doo")
我的問題是如何這顯然創建這樣的功能,它們充當集合並同時獲得功能。
您遇到了一種特殊的功能。從language definition (section 3.1.3 Function calls):
一種特殊類型的函數調用可以對 賦值運算符的左側顯示爲
class(x) <- "foo"
該語句確實是調用函數
class<-
與原始對象和右側。 該函數執行對象的修改並返回 結果,然後將結果存回原始變量。 (至少 概念,這是會發生什麼。一些額外的努力是爲了 避免不必要的數據重複。製造)
這樣的功能是.Primitive
功能。他們調用內部的C代碼。通常它們是通用函數,這意味着您可以爲它們定義方法。
@alexis_laz演示如何在his comment創建這樣的功能:
second <- function(x) x[2]
"second<-" <- function(x, value) { x[2] <- value; x }
xx <- 1:3
second(xx)
#[1] 2
second(xx) <- 4
xx
#[1] 1 4 3
謝謝。雖然這不是一個解決方案,但它可能是一個很好的跡象,我應該停止在這個方向上再尋找。 –
@ PollaA.Fattah請參閱編輯。 – Roland
這就是我在尋找如此多的感謝,指出我需要這種功能,並感謝@alexis_laz,他向我展示瞭如何創建它。 –
也許'setNames(列表( '富'= 2,噓聲= 3),C( 'も', '鬥')) ' – akrun
'name'和'names <-'實際上是不同的功能。它們是泛型,所以你可以爲它們定義方法。 – Roland
@Roland據我的理解,你的評論中有一個函數'names <-'用於改變names屬性。如果您告訴我如何創建任何函數,可以說'func <-',以便我可以更改其他屬性,那麼我將非常感謝。 –