R – 使用自动迭代避免循环

这是一个人为的例子,我用来希望更好地理解R.让我们说我想要一个名为“test”的字符向量的子集.我想将每个元素值从第三个字符返回到最后一个字符.这不起作用:

test = c( "Jane" , "Jerry" , "Joan" )
substr( test , 3 , length( test ) )
expecting: "ne" , "rry" , "an"

没有for循环有没有办法做到这一点?

最佳答案
使用nchar().它是矢量化的:

> test = c( "Jane" , "Jerry" , "Joan" )
> substr( test , 3 , nchar( test ) )
[1] "ne"  "rry" "an" 

鉴于nchar将返回一个长度向量,并且substr同样被向量化,因此期望使用向量参数,一个潜在的难题是它甚至接受3的标量参数.这里的答案是标量开头和stop参数被循环以匹配输入字符向量的长度.因此,您甚至可以使用1:2作为start参数,并获得交替完整且几乎完整的字符串:

>      substr( test , 1:2 , nchar( test ) )
[1] "Jane" "erry" "Joan"

转载注明原文:R – 使用自动迭代避免循环 - 代码日志