簡體   English   中英

如何在R中迭代作為子集的列表

[英]How to iterate over a list which is a subset, in R

我對 R 很陌生並且有一些問題。 我有一個大約有 6700 行和 1700 列的數據框。 我想用一個名為“模擬器”的包運行一些模擬。 使用這個包,你需要輸入數據框的兩列的名稱(在下面的代碼行中,它們是 J,j)然后模擬運行。

sim_par <- hapmap2gamete(geno = geno1[,c(J,j)], map = map, ref = ref, chr2exclude = 22)

我想增加腳本的自動化。 我創建了一個包含兩列的列表,每列都包含數據框中列的名稱。 我希望模擬貫穿列表的每一行。 我怎么能做到? 目前,我僅在使用單列列表對數據框進行子集化,然后使用以下代碼行后才設法運行模擬

for (J in 1:(ncol(geno1)-1)){
  for (j in (J+1):ncol(geno1)){

但這意味着我得到了很多不需要的模擬,我只需要帶有兩列的列表中的特定模擬。

任何建議將不勝感激。

如果您有一個較小的示例數據集和預期的輸出示例,它會有所幫助,但聽起來如果您有一個列名稱數據框,您可以使用apply()將名稱集傳遞到您的函數中。

例如,假設您有一個函數,它只計算每一行的總和,這就是您將函數應用於列名對的方法

# Dummy data
df <- data.frame(A = runif(10, min = 0, max = 10), 
                 B = runif(10, min = 0, max = 10), 
                 C = runif(10, min = 0, max = 10), 
                 X = runif(10, min = 10, max = 20), 
                 Y = runif(10, min = -10, max = 0), 
                 Z = runif(10, min = 100, max = 200))
head(df) 

           A        B        C        X          Y        Z
1  1.4750598 8.362330 6.978016 12.21039 -8.5725828 115.7556
2  4.0354462 1.129128 7.344782 11.37921 -6.0101677 157.4816
3  0.4487861 5.458865 1.868728 16.07851 -4.4989306 143.0767
4  6.7159017 9.716656 3.389074 18.60543 -8.8977248 124.7074
5  9.7450640 7.766489 9.853184 10.30856 -5.2577736 138.8847


# Pairs of column names
names <- cbind(J = colnames(df[, 1:3]),
               j = colnames(df[, 4:6]))
names

     J   j  
[1,] "A" "X"
[2,] "B" "Y"
[3,] "C" "Z"


# Custom function
hapmap2gamete <- function(df) {
  rowSums(df)
}

# 1 to apply over rows of data frame of names
results <- apply(names, 1, function(x) hapmap2gamete(df[, c(x)]))


# function results per row
results 


          [,1]       [,2]     [,3]
 [1,] 117.2306 -0.2102531 19.18841
 [2,] 161.5170 -4.8810398 18.72399
 [3,] 143.5255  0.9599347 17.94724
 [4,] 131.4233  0.8189311 21.99450
 [5,] 148.6298  2.5087156 20.16175
 [6,] 143.2299 -0.3145681 20.37046
 [7,] 156.6609 -4.6445246 25.92664
 [8,] 163.0996  4.0362794 19.30689
 [9,] 133.7253  4.4901854 18.26631
[10,] 166.0438  2.2915776 21.57703

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM