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 件
これは、関数がxを出力してから
nchar(x)
を返すために発生します ;返された要素はlapply
によってリストに入れられます 返され、REPLに印刷されました。nchar(x)
を置き換えるprint(nchar(x))
と 。または、リストを返す場合は、list(x, nchar(x))
を返すだけです 内部関数から。