2017-12-15 2 views
-1

그래서 데이터 세트 (상태)가 있습니다. 사실 내장 R 데이터 세트입니다.lapply()를 사용하여 각 변수의 고유 값을 확인하십시오.

상태에는 9 개의 변수가 있습니다.

> names(states) 
[1] "Population" "Income"  "Illiteracy" "Life.Exp" "Murder"  
"HS.Grad" "Frost"  "Area"  
[9] "Region" 

각 변수 내에서 고유 한 레벨을 보는 데 관심이 있습니다.

하나 개의 변수에 대한

, 내가 할 수있는

> unique(states$Region) 
[1] South   West   Northeast  North Central 
Levels: Northeast South North Central West 

가 어떻게 모든 9 개 변수에 대해이 과정을 반복 할 수 있습니까?

> unique <- function(var){ 
+ unique(states$var) 
+ } 
> lapply(names(states),unique) 

Error: evaluation nested too deeply: infinite recursion/
options(expressions=)? 
Error during wrapup: evaluation nested too deeply: infinite recursion/
options(expressions=)? 

왜이 오류가 나타 납니까? 어떻게 해결할 수 있습니까?

감사합니다.

+2

'lapply (states, unique)'? –

+2

'unique'을 덮어 쓴다.이 함수를 사용하려면 ** 절대 **해야한다. 특히 그렇지 않다. (그래서 오류가 "무한 재귀"라고한다.) 그렇지 않으면 코드가'unique <- function (var) base :: unique (states [[var]])'로 바뀌도록'base :: unique'을 사용해야 만합니다. 그러지 마세요. @RonakShah가 제시 한 것을 사용하십시오. – Tino

답변

0

당신은 적용 lapply, 그것은 문제가 될 수 있습니다에 의해 반환 된 값에

apply(states,2,unique) 
0

주에게 차이를 적용 할 수 있습니다. lapply로 작업하면 (Ronak Shah가 제안한대로) 목록을 제공하고 변수의 클래스를 유지합니다. 적용 결과 (공리에 의해 제안 된 것처럼)는 변수 중 하나가 문자 인 경우 문자 목록을 생성 할 수 있습니다. 다음은 다이아몬드 데이터가있는 예입니다 (첫 10 행만). 유사한 클래스 객체를 가진 목록을 얻으려면, 적용을 권장합니다. 그렇지 않으면 lapply가 더 편리합니다.

df = diamonds[1:10 , ] 
apply(df, 2, unique) 
lapply(df, unique) 
+0

귀하의 의견을 알리지 못했습니다. 죄송합니다. 나는 당신에게 나의 대답으로 신용을주고 단지 적용과 적용의 가치를 비교했다. – Rtist

관련 문제