使用cat()对多个向量元素求和

时间:2018-06-20 20:32:53

标签: r vector sum concatenation

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

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()是两个单独向量组合而成的向量?使用CREATE TABLE #temp_person ( pid int, -- Person ID lname varchar(255), -- Last Name fname varchar(255) -- First Name ); INSERT INTO #temp_person (pid, lname, fname) VALUES (1, 'Smith', 'Bob'), (2, 'Jones', 'Sally'), (3, 'Edwards', 'Frank'); CREATE TABLE #temp_fruit_person ( fid int, -- Fruit ID name varchar(255), -- Fruit Name pid int -- Person ID ) INSERT INTO #temp_fruit_person (fid, name, pid) VALUES (555, 'Orange', 1), (555, 'Orange', 2), (666, 'Apple', 1), (666, 'Apple', 3), (777, 'Banana', 1), (777, 'Banana', 3); 函数执行此操作的正确方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

这可能是您锻炼的重点,但请注意

res <- cat(seq1, seq2)

res将是NULL

这里的要点是,执行功能时(至少)有两个地方需要信息。控制台上显示什么,函数返回什么。当您将一个函数传递给另一个函数时,例如sum(cat(...)),外部函数将内部函数返回的值作为输入。 cat()返回NULL,但是具有向控制台发送信息的副作用,因此,当您运行sum(cat(seq1, seq2))时,将在控制台上获得序列,然后得到{ {1}}。

sum(NULL)相比,

c()实际上返回串联的序列。通过将cat()seq1传递给两者,您可以看到区别。

使用seq2,序列被打印到控制台:

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