당신은 당신의 목록이있는 경우 목록을
getElemsR <- function(dat, Index, Lev=2) {
if ((Lev <- (Lev - 1)) > 1) {
inds <- seq(length(dat[[1]]))
dat <- unlist(lapply(inds, function(i) getElemsR(dat, i, Lev)), recursive=F)
}
sapply(dat, "[[", Index, USE.NAMES=T, simplify=F)
}
# get the 2nd element of every 2nd-Level list
getElemsR(myData, 3) # Lev=2 by default
# get the 2nd element of every 3rd-Level list
getElemsR(myData, 2, 3)
# if needed as a vector:
unlist(getElemsR(myData, 2, 3))
깊은 2 개 이상의-수준,
또는 경우에도 작동합니다 다음과 같은 재귀 함수를 사용할 수 있습니다 깊이가 2 단계 인 경우, @ 원주민이 지적한 것처럼 단순한 사pply를 사용할 수 있습니다. 당신은 예부터 함수에
getElems <- function (dat, Index) {
sapply(dat, "[[", Index)
}
# get the 2nd element of every 2nd-level list
getElems(data1, 2)
샘플 데이터
data1 <- lapply(1:3, paste0, c("A","B"))
data2 <- lapply(4:6, paste0, c("A","B"))
names(data1) <- names(data2) <- c("_sub1", "_sub2", "_sub3")
myData <- list(Lev1A=data1, Lev1B=data2)
예, CSV가 있지만 열 중 하나가 실제로 쉼표로 구분 된 두 개의 값 목록입니다. 내가 정규식에 대해 생각했지만, 그냥 루프를 작성 결국. 그러나 이것은 유용합니다. gsub 접근법은 실제 데이터에/NA 값이없는 경우에도 작동합니다. 'data <-data <- c ("1,2", "3,4", NA, "5,6") col1 <-gsub (",. *", ""데이터) col2 <-gsub (". *,", "", data)' – computermacgyver