@Rbiginer (初心者 R)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

lapplyの挙動がよくわかりません

Q&A

R初心者ですので質問の仕方が間違ってたらごめんなさい。

リストの要素に対して関数を実行できるlapplyについてですが、

qiita.rb
> a <- list(c(1:10))  #aという1~10のリストを作って
> a  #aを実行すると
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10  #が表示されます
> print(a)  #printを実行しても同じ
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10

#ですが

> lapply(a, print)  #lapplyを使っても同じことが起こると思ったのですが
 [1]  1  2  3  4  5  6  7  8  9 10
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10 

lapplyを実行して出てくる上の
[1] 1 2 3 4 5 6 7 8 9 10
はなんですか?

print()にリストの文字を一文字ずつ渡してるんでないのですか?

ご回答をよろしくお願いします。

0 likes

1Answer

[1] 1 2 3 4 5 6 7 8 9 10lapply(a, print)printによる出力で、その後の[[1]]~ [1] 1 2 3 4 5 6 7 8 9 10lapply(a, print)の返した値です。

以下のように書くと分かり易いでしょうか。

a <- list(c(1:10))
b <- lapply(a, print) # [1]  1  2  3  4  5  6  7  8  9 10
print(paste("b=", b)) # [1] "b= 1:10"

追記

上記で解りづらければ、以下でいかがでしょうか。

a <- list(c(1:10))
b <- lapply(a, print) # [1]  1  2  3  4  5  6  7  8  9 10
"---"
print(b) # [[1]] [1]  1  2  3  4  5  6  7  8  9 10
結果
 [1]  1  2  3  4  5  6  7  8  9 10
[1] "---"
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10
0Like

Comments

  1. @Rbiginer

    Questioner

    ご回答ありがとうございます。まだよくわからないとこがあるのですが、確かに
    > b <- lapply(a, print) #を実行すると
    [1] 1 2 3 4 5 6 7 8 9 10 #だけが返ってきますが、
    ではおっしゃる「[1] 1 2 3 4 5 6 7 8 9 10がprintによる出力で」というのはどこがprintを実行する命令を出しているのですか?lapplyにもともとprintが含まれてるってことでしょうか?
    初心者すぎて申し訳ありません。
  2. `lapply(a, print)`には、`print`が含まれていますね?
    Rbiginerさんも、「print()にリストの文字を一文字ずつ渡してる」と書かれている通りで、その`print`によって出力されたという意味です。
    「`lapply(a, print)`の`print`による出力」と「`lapply(a, print)`の戻り値」があるのです。

Your answer might help someone💌