요즘 apply
과 관련하여 이상한 문제가 발생했습니다. 다음의 예를 생각해apply()가 모든 열에 대해 NA 값을 제공합니다.
set.seed(42)
df <- data.frame(cars, foo = sample(LETTERS[1:5], size = nrow(cars), replace = TRUE))
head(df)
speed dist foo
1 4 2 E
2 4 10 E
3 7 4 B
4 7 22 E
5 8 16 D
6 9 10 C
내가 그 data.frame
의 각 컬럼에 함수 fun
(예를 들어, mean
)을 적용 할 apply
를 사용하고 싶습니다. 단지 numeric
값을 포함하는 data.frame
경우에, 나는 어떤 문제가없는 : 내 data.frame
포함 numeric
및 character
데이터를 시도 할 때
apply(cars, 2, mean)
speed dist
15.40 42.98
그러나을은 실패 할 것 :
물론apply(df, 2, mean)
speed dist foo
NA NA NA
Warning messages:
1: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
2: In mean.default(newX[, i], ..) :
argument is not numeric or logical: returning NA
3: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
, character
열에 대해 NA
을 얻으려고했지만 어쨌든 numeric
열의 값을 가져오고 싶습니다. 여기 아주 분명 뭔가 빠진 것 같은 예감으로
sapply(df, class)
speed dist foo
"numeric" "numeric" "factor"
모든 포인터
주시면 감사하겠습니다!> sessionInfo()
R version 2.14.1 (2011-12-22)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
을 프레임 목록, 당신은
apply
대신lapply
또는sapply
를 사용할 수있다 'suppressWarnings (sapply (df, mean))'을 사용하여 경고를 제거 할 수도 있습니다. 그러나 이것은 당신의 버전이 단지 우리가 알 수있는 경고를 억제 할 것이고 걱정하지 않기 때문에 모든 경고를 억제 할 것이므로 아마도 당신의 솔루션이 더 나은 것일 것입니다. – Dason