2010-03-18 55 views
5

我對R有點新,而且我有這段代碼,它生成一個我不知道類型的變量。 R中是否有任何自檢設施會告訴我這個變量屬於哪個類型?如何在R中進行自省

以下說明了這個變量的屬性:我對線性模型的選擇工作

,和我有資源是另一種模式lm結果。現在我想通過命令摘要(模型)$ call調用lm調用,以便我不需要對模型結構進行硬編碼。但是,由於我必須更改數據集,因此我需要對「字符串」進行一些修改,但顯然它不是簡單的字符串。我想知道是否有類似string.replace的命令,以便我可以從變量$ call中操縱這個變量。

> str<-summary(rdnM)$call 
> str 
lm(formula = y ~ x1, data = rdndat) 
> str[1] 
lm() 
> str[2] 
y ~ x1() 
> str[3] 
rdndat() 
> str[3] <- data 
Warning message: 
In str[3] <- data : 
    number of items to replace is not a multiple of replacement length 
> str 
lm(formula = y ~ x1, data = c(10, 20, 30, 40)) 
> str<-summary(rdnM)$call 
> str 
lm(formula = y ~ x1, data = rdndat) 
> str[3] <- 'data' 
> str 
lm(formula = y ~ x1, data = "data") 
> str<-summary(rdnM)$call 
> type str 
Error: unexpected symbol in "type str" 
> 
+5

你可以通過閱讀開始*至R簡介*這是與R.考慮不使用的關鍵函數的名稱爲您的數據附帶的手冊之一 - 'STR()'是一個看待結構的更重要的功能。最後,'typeof()'和'class()'可能會有用。 – 2010-03-18 03:12:39

回答

4

在內省方面:R允許您輕鬆檢查和操作語言對象。
有關更多詳細信息,請參閱R Language Definition,特別是第2節和第6節。例如,就您的情況而言,摘要(rdnM)$ call是「呼叫」對象。你可以通過索引來檢索它的片斷,但是你不能通過像你試圖做的那樣分配索引來構造另一個調用對象。你必須建立一個新的電話。

在你的情況下,你正在構建一個更新的調用lm()出現一個現有的調用。如果你想重新使用不同的數據公式,你會通過formula(foo$call)提取調用對象的公式,像這樣:

foo <- lm(formula = y ~ x1, data = data.frame(y=rnorm(10),x1=rnorm(10))) 
bar <- lm(formula(foo$call), data = data.frame(y=rnorm(10),x1=rnorm(10))) 

在另一方面,如果你要更新公式,你可以使用update()

baz <- update(bar, . ~ . - 1) 
baz$call 
##>lm(formula = y ~ x1 - 1, data = data.frame(y = rnorm(10), x1 = rnorm(10)))