这是一个人为的例子,我用来希望更好地理解R. 让我们说我想要一个名为"test"的字符向量的子集.我想将每个元素值从第三个字符返回到最后一个字符.这不起作用:
test = c( "Jane" , "Jerry" , "Joan" )
substr( test , 3 , length( test ) )
expecting: "ne" , "rry" , "an"
Run Code Online (Sandbox Code Playgroud)
没有for循环有没有办法做到这一点?
42-*_*42- 10
使用nchar().它是矢量化的:
> test = c( "Jane" , "Jerry" , "Joan" )
> substr( test , 3 , nchar( test ) )
[1] "ne" "rry" "an"
Run Code Online (Sandbox Code Playgroud)
鉴于nchar将返回一个长度向量,并且该substr同样被向量化,因此期望使用向量参数,一个潜在的难题是它甚至接受标量参数的原因3.这里的答案是,start和stop参数的标量会被回收以匹配输入字符向量的长度.因此,您甚至可以使用1:2作为start参数,并获得交替完整且几乎完整的字符串:
> substr( test , 1:2 , nchar( test ) )
[1] "Jane" "erry" "Joan"
Run Code Online (Sandbox Code Playgroud)