我想生成一个不等向量列表,它表示两个现有向量n和L的 n 值之间的整数。
实施例
> n
[1] 1 2 3 4 5 6 7
> L
[1] 2 2 4 4 4 4 4
对于n的每个值,我想在n> L时连接L和n之间的整数,或者当L = n时检索n的单个值,或者当L> n时用值0替换。我想得到一个具有不相等向量的列表(或其他实体)。理想输出:
i
1 0
2 2
3 0
4 4
5 4 5
6 4 5 6
7 4 5 6 7
我曾尝试使用冒号运算符(意图稍后替换负值),例如
c((L):n)
但它出现了错误:
numerical expression has 205 elements: only the first used
答案 0 :(得分:1)
我们可以使用Map
f1 <- function(x,y) c(x, if(x < y) 0 else if(x == y) x else y:x)
Map(f1, n, L)
#[[1]]
#[1] 1 0
#[[2]]
#[1] 2 2
#[[3]]
#[1] 3 0
#[[4]]
#[1] 4 4
#[[5]]
#[1] 5 4 5
#[[6]]
#[1] 6 4 5 6
#[[7]]
#[1] 7 4 5 6 7
如果我们需要vector
sapply(Map(f1, n, L), paste, collapse=" ")
#[1] "1 0" "2 2" "3 0" "4 4" "5 4 5" "6 4 5 6" "7 4 5 6 7"
或者,如果我们只想打印它
for(i in seq_along(n))
cat(c(n[i], if(n[i] < L[i]) 0 else if(n[i] == L[i]) n[i] else L[i]:n[i]), "\n")
#1 0
#2 2
#3 0
#4 4
#5 4 5
#6 4 5 6
#7 4 5 6 7
答案 1 :(得分:1)
使用带有Reduce
参数的accumulate = TRUE
的方法,将结果作为结果
v1 <- ifelse(L > n, 0, ifelse(n == L, L, -1))
v1[v1 == -1] <- unique(unlist(Reduce(paste, x[v1==-1], y[v1==-1], accumulate = TRUE)))[-1]
#[1] "0" "2" "0" "4" "4 5" "4 5 6" "4 5 6 7"