我想生成一个不相等向量的列表,它们表示两个现有向量 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
最佳答案
我们可以使用 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
如果我们需要一个向量
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
关于r - 创建一个向量列表,表示 R 中两个等长向量的第 n 个值之间的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41825520/