bugfix> r > 投稿

Rで、 lapply で2つの関数を実行すると 、リスト全体で最初の関数を実行してから、リストで2番目の関数を実行します。リストの最初の要素で両方の関数を強制的に実行してから、2番目の要素に移動することは可能ですか?

私は関数 print を使用していますおよび nchar にとってイラスト目的 -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 を抑制する方法はありますか再び印刷されることから?

回答 2 件
  • invisible(lapply(c("a","bb","cdd"), function(x) { print(x); print(nchar(x)) }))
    
    

  • これは、関数がxを出力してから nchar(x) を返すために発生します ;返された要素は lapply によってリストに入れられます  返され、REPLに印刷されました。

    nchar(x) を置き換える   print(nchar(x)) と 。または、リストを返す場合は、 list(x, nchar(x)) を返すだけです  内部関数から。

あなたの答え