내 중첩 목록의 숫자 열에 만 scale 함수를 적용하고 동일한 구조를 사용하지만 크기가 조정 된 값이 대체 된 중첩 된 목록을 반환하고 싶습니다.
다음은 내 예에 대한 더미 목록입니다.
#Create dataframes ABC and DEF, where 'left' and 'right' columns are numeric and the 'up' column contains characters
ABC <- cbind.data.frame(left = c(2, 3, 5), right = c(5, 8, 4) , up = c("ac","bb", "cc"))
ABC$up <- as.character(ABC$up)
DEF <- cbind.data.frame(left = c(7, 2, 9), right = c(3, 6, 1) , up = c("aa","bb", "cc"))
DEF$up <- as.character(DEF$up)
#Create a list called mylist, containing two dataframes: ABC and DEF
mylist <- list(ABC = ABC, DEF = DEF)
$ABC
# left right up
#1 2 5 aa
#2 3 8 bb
#3 5 4 cc
$DEF
# left right up
#1 7 3 aa
#2 2 6 bb
#3 9 1 cc
scale 함수가 각 열을 평균으로 빼고 각 열을 표준 편차로 나누면 scale (x, center = TRUE, scale = TRUE) :
perfect.scaled.mylist
$ABC
# left right up
#1 -0.87 -0.32 aa
#2 -0.22 1.12 bb
#3 1.09 -0.80 cc
$DEF
# left right up
#1 0.28 -0.13 aa
#2 -1.11 1.05 bb
#3 0.83 -0.93 cc
나는 이것을 시도했다 :
scaled.mylist <- lapply(lapply(mylist, `[`, -c(3)), function(x) scale(x))
$ABC
# left right
#1 -0.87 -0.32
#2 -0.22 1.12
#3 1.09 -0.80
$DEF
# left right
#1 0.28 -0.13
#2 -1.11 1.05
#3 0.83 -0.93
'왼쪽'과 '오른쪽'열의 크기를 올바르게 조정하지만 '위쪽'열을 완전히 제거합니다. 그래서 저는이 부분이 scale 함수를 올바르게 사용한다고 생각하고 있습니다. 그래서 다른 lapply 안에 중첩하여이 콘텐츠를 전체 목록으로 보낼 수 있습니다.
그래서 나는 이것을 시도했다.
scaled.nested.mylist <- lapply(mylist, function(x) lapply(lapply(x, '[', c("left", "right")), scale))
이 오류를 반환합니다 Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric
. 그래서 그것은 효과가 없었고 그것이 나의 최선의 희망이며 왜 그것이 실패했는지 모르겠습니다.
마지막으로, 내 코드의 구조가 정확하다고 생각하는 다른 함수 max (각 열의 최대 값을 얻기 위해)를 시도했지만 scale 함수에서 실패했습니다.
max.mylist <- lapply(mylist, function(x) lapply(lapply(x, '[', c("left", "right")), max))
$ABC
# left right up
#1 NA NA NA
$DEF
# left right up
#1 NA NA NA
세 열을 모두 성공적으로 반환하지만 비어 있습니다.
SO에서 비슷한 예를 보았지만 그중 어느 것도 원래 중첩 목록을 반환하지 않고 대신 변환 된 열만있는 새 목록을 반환합니다. 다운 스트림 함수가이 구조에 의존하기 때문에 원래 목록 구조를 유지해야합니다. 나는 R을 처음 접했고,리스트 랜드에서 길을 잃고 있다는 것을 인정하지만, 어떤 조언이라도 고맙게 생각합니다.
다음과 같이 할 수 있습니다.
lapply(mylist, function(x) {
as.data.frame(lapply(x, function(y) if(is.numeric(y)) scale(y) else y),
stringsAsFactors = FALSE)})
#> $ABC
#> left right up
#> 1 -0.8728716 -0.3202563 ac
#> 2 -0.2182179 1.1208971 bb
#> 3 1.0910895 -0.8006408 cc
#>
#> $DEF
#> left right up
#> 1 0.2773501 -0.1324532 aa
#> 2 -1.1094004 1.0596259 bb
#> 3 0.8320503 -0.9271726 cc
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다