2017-12-07 13 views
0

Ly의 각 값에 대해 Lx의 각 매개 변수 값을 통해 함수를 반복합니다. 이 함수는 목록을 생성 한 다음 목록을 행렬에 넣습니다. 결과 목록에 이름을 지정하여 각 함수 실행에 어떤 매개 변수 조합 (Lx 및 Ly)이 사용되었는지 알 수 있도록하려고합니다. 아래의 재현 가능한 예제를 참조하십시오.R 행렬의리스트에 이름 지정

test_sim <- function(Lx, Ly){ 
    results=list() 
    ret <- runif(3, min=0, max=100) 
    results[[1]]=ret 
    names(results)[1]=paste(Lx,Ly,sep = "_") 
    return(results) 
} 
Lx <- seq(0.25,0.5,0.25) 
Ly <- seq(0.05, 0.10, 0.05) 
blam <- sapply(Lx, function(x) mapply(test_sim, x, Ly)) 

그러나 행렬의 처음 두 행의 이름 만 나타납니다. 각 목록의 이름을 어떻게 적절하게 지정할 수 있습니까?

답변

1

sapply 대신 lapply을 사용할 수 있습니다.

이 중첩 된 목록을 생성합니다 :

# This produces a nested list 
blam <- lapply(Lx, function(x) mapply(test_sim, x, Ly)) 
blam; 
#[[1]] 
#[[1]]$`0.25_0.05` 
#[1] 80.11677 60.42781 83.07715 
# 
#[[1]]$`0.25_0.1` 
#[1] 34.98122 13.24191 64.38831 
# 
# 
#[[2]] 
#[[2]]$`0.5_0.05` 
#[1] 56.466308 7.158086 66.655274 
# 
#[[2]]$`0.5_0.1` 
#[1] 66.88615 16.05237 43.16896 

그런 다음 unlist(..., recursive = FALSE)을 사용하여 목록을 평평하게 할 수 있습니다

# Flatten nested list 
unlist(blam, recursive = FALSE); 
#$`0.25_0.05` 
#[1] 80.11677 60.42781 83.07715 
# 
#$`0.25_0.1` 
#[1] 34.98122 13.24191 64.38831 
# 
#$`0.5_0.05` 
#[1] 56.466308 7.158086 66.655274 
# 
#$`0.5_0.1` 
#[1] 66.88615 16.05237 43.16896 
+0

예! 그것은 작동합니다. 나는'unlist'에서'recursive'에 대해 몰랐습니다. – user2359494