2016-03-16 86 views
0

我有兩個數據集R:for循環輸出

data1 <- data.frame(c(0.0000, 0.5949, 0.8190, 1.0350, 
          0.4960, 0.4000, 0.5000, 
          0.3000, 0.4560, 0.6338, 1.2110), 
         c(0.0000, 0.8445,0.8900,1.1120,0.6780, 
          0.3000,0.5660,0.6000,0.8320,0.5987,1.1740)) 

vector1 <- list(rep(c(10,5,2), 5), rep(c(20,10,5), 5)) 

vector1是一個愚蠢的例子,但它讓我真正一覽表的結構)

n2 <- 10 
    idealized.ranks2 <- c(0:10) 
    sorted.z <- NULL 
    fonction <- list() 
    n.2.bis <- NULL 
    n.2.simu.bis <- NULL 
    precip.back2 <- rep(list(as.vector(NULL)), 4) 

for(z in 1:dim(data1)[2]){ 
    sorted.z[[z]] <- sort(data1[,z]) 
    fonction[[z]] <- approxfun(idealized.ranks2, sorted.z[[z]]) 

    for(x in 1:length(vector1)){ 
    n.2.bis[[x]] <- pnorm(vector1[[x]]) 
    n.2.simu.bis[[x]] <- n.2.bis[[x]]*(n2+1) 

    precip.back2[[x]] <- fonction[[z]](n.2.simu.bis[[x]]) 
    print(z) 
    } 
} 
[1] 1 
[1] 1 
[1] 2 
[1] 2 

輸出給我的結果爲fonction[[2]]vector1[[1]]fonction[[2]]vector1[[2]],所以在precip.back2中列出2個。 我想有是precip.back2與結果清單4:

fonction[[1]] and vector1[[1]], 
fonction[[1]] and vector1[[2]], 
fonction[[2]] and vector1[[1]], 
fonction[[2]] and vector1[[2]] 

print(z)

你有什麼建議嗎? 最好的,

+0

您的代碼是不可複製的。你引用'data4'。我假設你的意思是'data1'。你指的是'idealized.ranks2',你沒有提供。 –

+0

謝謝你的feedbakc,@Jean V. Adams,我糾正了它。 –

+0

代碼中仍有錯誤。變量n2和idealized.ranks2沒有定義。 – Dave2e

回答

0

我不確定這是你究竟是什麼,完全。但是,也許它會有所幫助。

data1 <- data.frame(
    c1=c(0.0000, 0.5949, 0.8190, 1.0350, 0.4960, 0.4000, 0.5000, 
    0.3000, 0.4560, 0.6338, 1.2110), 
    c2=c(0.0000, 0.8445, 0.8900, 1.1120, 0.6780, 0.3000, 0.5660, 
    0.6000, 0.8320, 0.5987, 1.1740)) 
vector1 <- list(rep(c(10, 5, 2), 5), rep(c(20, 10, 5), 5)) 
n2 <- 10 
idealized.ranks2 <- c(0:10) 

# define a data frame with all combinations of x and z 
df <- expand.grid(xx=1:length(vector1), zz=1:dim(data1)[2]) 
# create an empty list for the results 
results <- vector("list", dim(df)[1]) 
# run through your code for each combination of x and z 
for(i in 1:dim(df)[1]) { 
    x <- df$xx[i] 
    z <- df$zz[i] 
    sorted.z <- sort(data1[, z]) 
    fonction <- approxfun(idealized.ranks2, sorted.z) 
    n.2.bis <- pnorm(vector1[[x]]) 
    n.2.simu.bis <- n.2.bis*(n2+1) 
    precip.back2 <- fonction(n.2.simu.bis) 
    # save the results 
    results[[i]] <- list(x, z, sorted.z, fonction, 
    n.2.bis, n.2.simu.bis, precip.back2) 
} 
# look at the results 
results 
+0

謝謝@Janan V. Adams,你的方法給了我想要的東西。最後,我只是根據我的需要修改了結果列表。 –