视频: 在R中讀取Excel資料表 2024
在R中使用循环非常方便,但如果循环不过价值观而不是指标。为此,请使用以下代码替换函数的中间部分:
nclient < - 客户端的长度(客户端)VAT < - 数字(nclient)(i在seq_along(客户端)中){增值税[i] < - switch(client [i],private = 1.12,public = 1.06,1))}
下面是使用循环向量的一些区别:
<! --1 - >-
将矢量客户端的长度分配给变量nclient。然后你制作一个数字矢量增值税,它和矢量客户端一样长。这被称为向量的
-
预分配 。然后通过使用函数seq_along()来遍历客户端的索引而不是向量本身。在循环的第一遍中,VAT中的第一个值被设置为switch()应用于客户端中的第一个值的结果。在第二遍中,增值税的第二个值是switch()应用于客户端中第二个值的结果等等。 <! - 2 - >
-
你可能会试图用vector 1:nclient代替seq_along(client),但是这不是个好主意。如果矢量客户端的长度为0,则seq_along(client)将创建一个空向量,循环中的代码将不会执行。如果你使用1:nclient,R会创建一个向量c(1,0)并循环这两个值,给你一个完全错误的结果。
每当你在R中加长一个对象时,R必须复制整个对象,并把它移动到内存中的新位置。这有两个效果:
首先,它减慢你的代码,因为所有的复制都需要时间。其次,随着R在内存中不断移动,这个内存被分割成很多小空间。
这被称为-
碎片,
-
并且它使得R和内存之间的通信不够流畅。您可以像前面的示例中那样通过
预先分配 内存来避免这种碎片。