在我的[R腳本...提取數據
我有一個對象myObject
這是一件好事,看起來像這樣:
> myObject
m convInfo data call dataClasses control
FALSE FALSE FALSE FALSE FALSE FALSE
它是什麼,從返回is.na(obj)
其中obj
是nls
擬合。
我想測試,如果第一項是假的而不是真。我如何提取出來?我試過myObject$m
,但沒有奏效。
在我的[R腳本...提取數據
我有一個對象myObject
這是一件好事,看起來像這樣:
> myObject
m convInfo data call dataClasses control
FALSE FALSE FALSE FALSE FALSE FALSE
它是什麼,從返回is.na(obj)
其中obj
是nls
擬合。
我想測試,如果第一項是假的而不是真。我如何提取出來?我試過myObject$m
,但沒有奏效。
你有一個命名的(邏輯)向量。
> v <- 1:5
> names(v) <- LETTERS[1:5]
> is.na(v)
A B C D E
FALSE FALSE FALSE FALSE FALSE
> myObj <- .Last.value
你解決它像任何其他原子向量:
> myObj[1]
A
FALSE
> myObj[1] == FALSE
A
TRUE
nls()
返回的對象是一個列表。 is.na()
在列表中的行爲在某種意義上不是NA
,這有點奇怪。從?is.na
:
Value:
The default method for ‘is.na’ applied to an atomic vector returns
a logical vector of the same length as its argument ‘x’,
containing ‘TRUE’ for those elements marked ‘NA’ or, for numeric
or complex vectors, ‘NaN’ (!) and ‘FALSE’ otherwise. ‘dim’,
‘dimnames’ and ‘names’ attributes are preserved.
The default method also works for lists and pairlists: the result
for an element is false unless that element is a length-one atomic
vector and the single element of that vector is regarded as ‘NA’
or ‘NaN’.
所以t
是在你的t
的TRUE
& FALSE
值確定按照上述引用的文字邏輯載體。因此所有的
t[1]
t["m"]
head(t, 1)
提取t
的第一個元素。如果你想測試FALSE
然後我可能會嘗試:
!isTRUE(t[1])
例如
> set.seed(1)
> logi <- sample(c(TRUE,FALSE), 5, replace = TRUE)
> logi
[1] TRUE TRUE FALSE FALSE TRUE
> !isTRUE(logi[1])
[1] FALSE
的$
版本將無法正常工作的原因是$
在案,以適用只到非原子的載體。 logi
(或您的t
)是一個原子向量,因爲它包含相同類型的元素。
> is.atomic(logi)
[1] TRUE
> names(logi) <- letters[1:5]
> logi$a
Error in logi$a : $ operator is invalid for atomic vectors
> logi["a"]
a
TRUE
對不起忘了改標題。 – CodeGuy 2012-07-05 19:14:17
你能提供更多的細節嗎?也許'str(t)'和'dput(t)'。或者至少描述你如何創建't'。還值得注意的是't'是一個內置的函數,你已經覆蓋,這不是最好的做法。 – Justin 2012-07-05 19:15:18
+1對覆蓋基本R函數的注意事項發表評論。從長遠來看,完全搞砸了。 – 2012-07-05 19:37:17