2012-07-05 173 views
0

在我的[R腳本...提取數據

我有一個對象myObject這是一件好事,看起來像這樣:

> myObject 
      m convInfo  data  call dataClasses  control 
     FALSE  FALSE  FALSE  FALSE  FALSE  FALSE 

它是什麼,從返回is.na(obj)其中objnls擬合。

我想測試,如果第一項是假的而不是真。我如何提取出來?我試過myObject$m,但沒有奏效。

+0

對不起忘了改標題。 – CodeGuy 2012-07-05 19:14:17

+2

你能提供更多的細節嗎?也許'str(t)'和'dput(t)'。或者至少描述你如何創建't'。還值得注意的是't'是一個內置的函數,你已經覆蓋,這不是最好的做法。 – Justin 2012-07-05 19:15:18

+0

+1對覆蓋基本R函數的注意事項發表評論。從長遠來看,完全搞砸了。 – 2012-07-05 19:37:17

回答

1

你有一個命名的(邏輯)向量。

> 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 
0

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是在你的tTRUE & 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