簡體   English   中英

R-在元素中一次應用多個功能

[英]R - lapply several functions in one lapply by elements

在R中,當我在lapply運行兩個函數時,它將在整個列表上運行第一個函數,然后在列表上運行第二個函數。 是否有可能迫使它在移至第二個元素之前先在列表的第一個元素上運行這兩個功能?

我將函數printnchar用於說明目的 -我編寫了一些更復雜的函數來生成data.frame。

  lapply(c("a","bb","cdd"), function(x) {
    print(x)
    nchar(x)
  })

輸出將是

[1] "a"
[1] "bb"
[1] "cdd"
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

我想要這樣的東西:

[[1]]
[1] "a"
[1] 1

[[2]]
[1] "bb"
[1] 2

[[3]]
[1] "cdd"
[1] 3

這可能嗎?

Juan Antonio Roladan Diaz和cash2都建議使用list ,這是一種工作:

lapply(c("a","bb","cdd"), function(x) { 
  list(x, nchar(x))
})

[[1]]
[[1]][[1]]
[1] "a"

[[1]][[2]]
[1] 1


[[2]]
[[2]][[1]]
[1] "bb"

[[2]][[2]]
[1] 2


[[3]]
[[3]][[1]]
[1] "cdd"

[[3]][[2]]
[1] 3

但這有點太混亂了。

使用打印效果更好

lapply(c("a","bb","cdd"), function(x) { 
  print(x)
  print(nchar(x))
  })

[1] "a"
[1] 1
[1] "bb"
[1] 2
[1] "cdd"
[1] 3
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

但是有辦法抑制再次輸出nchar嗎?

發生這種情況是因為該函數先打印x,然后返回nchar(x) 返回的元素被lapply放到列表中並返回,並打印在REPL上。

nchar(x)替換為print(nchar(x)) 或者,如果要返回list(x, nchar(x)) ,只需從內部函數返回list(x, nchar(x))

invisible(lapply(c("a","bb","cdd"), function(x) { print(x); print(nchar(x)) }))

暫無
暫無

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

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