【问题标题】:Using cat() to sum multiple vector elements使用 cat() 对多个向量元素求和
【发布时间】:2018-11-30 01:58:18
【问题描述】:

我在 DataCamp 上做一个小型的 R 练习,问题是生成 2 个不同序列的向量,然后使用 cat() 和 sum() 得到 2 个向量的所有元素的总和。

seq1 <- seq(1, 500, 3)
seq2 <- seq(1200, 900, -7)

选项 1 有效:

sum(seq1)
sum(seq2)
sum(sum(seq1), sum(seq2))

选项2:

cat(seq1, seq2)

有效,但我想知道为什么以下方法无效:

sum(cat(seq1, seq2))

如果sum(seq1) 有效,为什么不总结cat(seq1, seq2),这是两个单独向量组合的向量?使用cat() 函数的正确方法是什么?

谢谢!

【问题讨论】:

  • 你确定他们说的是cat()吗?还是他们的意思是c()(合并)?

标签: r vector sum concatenation


【解决方案1】:

这可能是你练习的重点,但是看看

res <- cat(seq1, seq2)

res 将是 NULL

这里的要点是,在执行一个函数时,有(至少)两个地方可以存放信息。控制台上显示的内容以及函数返回的内容。当您将一个函数传递给另一个函数时,例如sum(cat(...)),外部函数将内部函数返回的值作为输入。 cat()返回NULL,但有一个副作用是向控制台发送信息,所以当你运行sum(cat(seq1, seq2))时,你会在控制台上得到序列,然后是sum(NULL)的结果。

c()cat() 相比,实际上返回了串联的序列。您可以通过将seq1seq2 传递给两者来查看差异。

使用cat(),将序列打印到控制台:

cat(seq1, seq2)
# 1 4 7 10 13 16 19 22 25 28 31 34 37...

使用c() 返回序列。由于您没有将它分配给任何东西,它仍然会进入控制台,但它看起来不同:

c(seq1, seq2)
#  [1]    1    4    7   10   13 ...

然后,查看总和,使用c(),您会得到结果:

sum(c(seq1, seq2))
# [1] 87029

使用cat(),控制台被打印的序列取代,然后出现结果,即0

sum(cat(seq1, seq2))
# 1 4 7 10 13 16 19 22...
# ... 934 927 920 913 906[1] 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多