4
我試圖創建從數據幀繼承一個新的類:R:一個S4對象上應用terms.formula繼承data.frame
> setClass('new.frame',
representation(colour='character'),
contains = 'data.frame')
這是一個類,用於測試的實例:
> test_data = data.frame(cbind(runif(5), runif(5)))
> names(test_data) = c('X', 'Y')
> test_frame = new('new.frame', test_data, colour='red')
只是爲了確保它看起來沒事......
> data.frame
Object of class "new.frame"
X Y
1 0.8766306 0.4741213
2 0.1221508 0.5117665
3 0.4838761 0.4973627
4 0.7858294 0.4064749
5 0.5147703 0.9135304
Slot "colour":
[1] "red"
...並確保繼承工作
> is.data.frame(test_frame)
[1] TRUE
> getClass(class(test_frame))
Class "new.frame" [in ".GlobalEnv"]
Slots:
Name: .Data colour names
Class: list character character
Name: row.names .S3Class
Class: data.frameRowLabels character
Extends:
Class "data.frame", directly
Class "list", by class "data.frame", distance 2
Class "oldClass", by class "data.frame", distance 2
Class "vector", by class "data.frame", distance 3
這是我遇到的,當我試圖利用的是一個數據幀屬性的問題:
> terms.formula(Y ~ X, data = test_frame)
Error in terms.formula(Y ~ X, data = test_frame) :
'data' argument is of the wrong type
我可能會錯過一些愚蠢的。如果是這樣,提前謝謝指出。
如果我對這裏的問題是正確的,是有反正我可以terms.formula認識到,我給它一個data.frame的事實呢?
我還沒敢勇敢跟蹤(或理解)的SP包是如何工作的,但SpatialPointsDataFrame(或SpatialxxxDataFrame)會很樂意與terms.formula – mnel
工作@mnel - 這是因爲一個'SpatialPointsDataFrame'失敗'is.data.frame()'測試中所引用的代碼塊的第一線之上,引發了調用'as.data.frame()'(和,真,'as.data.frame.SpatialPointsDataFrame()')。返回一個誠實,善良data.frame,根據需要,所以'。內部通話(terms.formula())'工作得很好。 (如果你運行'庫(SP);例如(默茲); is.data.frame(默茲);類(as.data.frame(默茲))',你可以看到這是如何工作的。) –
精彩。謝謝喬希!並討論這個問題! –