自动迭代循环的R-避免

自动迭代循环的R-避免,r,R,这是一个人为的例子,我希望用它来更好地理解R。假设我想将一个名为“test”的字符向量子集。我想返回从第三个字符到最后一个字符的每个元素值。这不起作用: test = c( "Jane" , "Jerry" , "Joan" ) substr( test , 3 , length( test ) ) expecting: "ne" , "rry" , "an" 有没有一种方法可以在没有for循环的情况下执行此操作?使用nchar()。它是矢量化的: > test = c( "Jane"

这是一个人为的例子,我希望用它来更好地理解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
的标量参数。这里的答案是,start和stop参数的标量可以循环使用,以匹配输入字符向量的长度。因此,您甚至可以使用1:2作为开始参数,并获得交替的完整字符串和几乎完整的字符串:

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

@DWin-你能再解释一下吗?length(test)返回测试中元素的编号,即3。相反,您可以使用nchar计算字符数。哦!我想我明白了。nchar在测试中迭代每个元素,而长度对向量本身起作用?前者被称为“矢量化”?我喜欢这一点——“啊哈”时刻:)你可能会遇到的另一个困惑是当你在数据帧上使用它时。您可能期望它会产生行数,但实际上它会给出列数。试试看
NROW()
是了解您有多少病例的正确方法。