※ 引述《AmigoSafin ()》之銘言:
: [問題類型]:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
:
: [軟體熟悉度]:
: 入門(寫過其他程式,只是對語法不熟悉)
: [問題敘述]:
: 請簡略描述你所要做的事情,或是這個程式的目的
: 想請教大家
: 已知一個data frame內有1000個變數
: 寫code找出其中為factor的變數
: ( You may choose to create a data frame but it is not part of the
: requirement)
: 得到的解答是這樣:
: sum(sapply(x,is.factor))
x如果是一個長度為k的list或有k欄的data.frame
(其實data.frame就是一種list),
則sapply(x,is.factor)會回傳k個布林值,
分別指出每個單位是不是factor。
至於sum(一串布林值)就是有幾個True的意思。
在R中布林值加減是把True當成1而False當成0。
: getNFactors<-function(x) sum(sapply(x,is.factor))
: y<-data.frame(a=letters[1:2],b=1:2,d=c("A","Factor?"),e=2:3)
: getNFactors(y) # 2
在使用data.frame()的時候,
有一個參數叫stringsAsFactors可以自動把字元型式的欄位變成factor。
通常stringsAsFactors的預設值是True,
因此,y$a和y$d此時是factor。
你可以藉由sapply(y, class)或是class(y$d)看出來。
: y$d<-as.character(y$d)
: getNFactors(y) # 1
這裡是把y$d轉成字串,所以不再是factor了。
一樣,看看sapply(y, class)。
: 實話說實在看不太懂最後這一部分
: 請問是if getNFactors(y)=2則其中沒有Factors
: if getNFactors(y)=1則為有 Factors
應該是寫成 if(getNFactors(y)==1),意思是y裡頭是不是正好有1個factor。
: 因為原程式碼用d=c("A", "Factors?")來測試
: 但b=1:2, e=2:3
R裡頭建立公差為1的數列的方便寫法。
: 是什麼意思呢?
: 謝謝大家~~