簡體   English   中英

在 R 中應用和應用行為

[英]Sapply and apply behaviour in R

考慮以下df

structure(list(GID7173723 = c("A", "T", "G", "A", "G"), GID4878677 = c("G", 
"C", "G", "A", "G"), GID88208 = c("A", "T", "G", "A", "G"), GID346403 = c("A", 
"T", "G", "A", "G"), GID268825 = c("G", "C", "G", "A", "G")), row.names = c(NA, 
5L), class = "data.frame")

看起來像這樣:

  GID7173723 GID4878677 GID88208 GID346403 GID268825
1          A          G        A         A         G
2          T          C        T         T         C
3          G          G        G         G         G
4          A          A        A         A         A
5          G          G        G         G         G

以及以下 function:

f = function(x){
  ifelse(x=='A',x<-1,x) 
}

使用apply一切運行良好,如我所料:

    apply(df, 1,f)

          1   2   3   4   5  
GID7173723 "1" "T" "G" "1" "G"
GID4878677 "1" "C" "G" "1" "G"
GID88208   "1" "T" "G" "1" "G"
GID346403  "1" "T" "G" "1" "G"
GID268825  "1" "C" "G" "1" "G"

但如果我使用sapplylapply所有值都轉換為 1:

> sapply(dfn,f)
     GID7173723 GID4878677 GID88208 GID346403 GID268825
[1,]          1          1        1         1         1
[2,]          1          1        1         1         1
[3,]          1          1        1         1         1
[4,]          1          1        1         1         1
[5,]          1          1        1         1         1

我從文檔中lapplysapplyFUN應用於每個元素。 為什么一切都被轉換為1? R 將整數強制轉換為字符串有什么關系? 請幫忙。

我不明白的另一個方面是為什么使用這個新的 function 我只有一個包含 5 個元素的vector ,而不是一個充滿“G”的dataframe

    f2 = function(x) x<-'G'

> sapply(dfn,f2)
GID7173723 GID4878677   GID88208  GID346403  GID268825 
       "G"        "G"        "G"        "G"        "G" 

> apply(dfn, 1,f2)
  1   2   3   4   5 
"G" "G" "G" "G" "G" 
  • apply 將 df 或矩陣作為輸入,輸出=>vector, list, array
  • lapply 將 df、list 或 vector 作為輸入,輸出=> list
  • sapply 將 df、list 或 vector 作為輸入,outputs=> 向量或矩陣

第一個問題。 如果你使用

apply(df, 2,f)

你還會得到一張滿是 1 的桌子。 R 未將字符串轉換為整數。

第二個問題。 試試這個,因為 1 用於行,2 用於列。

apply(df, 2,f2)

暫無
暫無

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

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