【发布时间】:2020-09-22 07:35:58
【问题描述】:
假设我们有一个长度为N 的一维字符串向量V,其中N 是一个给定的自然非零整数。让我们引入一个数字n,这样N%%n==0(n 除以N)。
我想获得向量U,使得第一个组件是V的第一个n组件的串联,第二个组件是'''的第二个n组件的串联V'''等等,而这个没有使用任何循环,加上n是一个变量(基本上它是在更大代码的另一部分派生的)。
因此,给定N,比如说V=as.character(1:N)。用N%%n==0 介绍n。
我想做无循环(也可能没有if)和一行:
U = c()
if (length(V)/n>1) {
for (t in 1:(length(V)/n)) {
U = paste(U, V[ ngroup(1:length(V),n,ifelse(t==n,0,t)) ], sep='')
}
} else { U=paste(V,collapse='') }
函数ngroup 由下式给出
ngroup <- function(x,n,r) which(x%%n == r) # r: number in [0, 1, 2, ..., n-1].
例如,如果N=8 和n=2,我们直接有ngroup(1:length(V),n,1) = c(1,3,5,7)(奇数)和ngroup(1:length(V),n,0) = c(2,4,6,8)(偶数),因此
U = paste(V[c(1,3,5,7)], V[c(2,4,6,8)], sep='')
所以U 是向量 ["V[1]V[2]" "V[3]V[4]" "V[5]V[6]" "V[7]V[8 ]"] 以符号形式书写(将 V[1] 与 V[2]、V[3] 与 V[4] 连接等)。
也许我们可以用 'apply' 系列函数做点什么,但在这种情况下我并不放心。非常感谢您的帮助!
【问题讨论】:
-
您可以在
matrix(V, n)上使用apply()。类似apply(matrix(V, n), 1, paste0, collapse='') -
嗨,
apply(t(matrix(V, n)), 1, paste0, collapse='')确实有效。谢谢! -
试试,
apply(matrix(V, n), 2, paste0, collapse='')