2014-04-25 3 views
1

일치 실패한 호출입니다 나타납니다 : 당신은 INDEX에 대해 하나의 객체를 가질 필요가tapply 함수는 인수가 동일하지 않은 길이라는 것을 불평하지만 그들은 문제의 길이를 표시하는 오류 메시지와 일부 디스플레이를 여기

it <- tapply(molten, c(molten$Activity, molten$Subject, molten$variable), mean) 
# Error in tapply(molten, c(molten$Activity, molten$Subject, molten$variable), : 
# arguments must have same length 

length(molten$Activity) 
# [1] 679734 

length(molten$Subject) 
# [1] 679734 

length(molten$variable) 
# [1] 679734 

dim(molten) 
# [1] 679734  4 

str(molten) 
# 'data.frame': 679734 obs. of 4 variables: 
# $ Activity: Factor w/ 6 levels "WALKING","WALKING_UPSTAIRS",..: 5 5 5 5 5 5 5 5 5 5 ... 
# $ Subject : Factor w/ 30 levels "1","2","3","4",..: 2 2 2 2 2 2 2 2 2 2 ... 
# $ variable: Factor w/ 66 levels "tBodyAcc-mean()-X",..: 1 1 1 1 1 1 1 1 1 1 ... 
# $ value : num 0.257 0.286 0.275 0.27 0.275 ... 

답변

1

을 하지만 c() 의지 상기 eror의 원인 함께 문자열 모두를, 그래서 목록을 사용 : 더 나은

it <- tapply(molten$value, list(Act=molten$Activity, sub=molten$Subject, var=molten$variable), mean) 

은 다음과 같습니다

it <- with(molten , tapply(value, list(Act=Activity, Sub=Subject, var=variable), mean)) 
4

?tapply을 보면 X이 "원자 객체, 일반적으로 벡터"가되어야 함을 알 수 있습니다. tapply에 원자 오브젝트가 아닌 데이터 프레임 ("molten")을 공급합니다. is.atomic을 참조하고 is.atomic(molten)을 시도하십시오. 또한 그룹화 변수는 list (INDEX 인수 참조)으로 제공되어야합니다. 이 같은

뭔가 작동합니다

tapply(X = warpbreaks$breaks, INDEX = list(warpbreaks$wool, warpbreaks$tension), mean) 
#   L  M  H 
# A 44.55556 24.00000 24.55556 
# B 28.22222 28.77778 18.77778