r - 创建一个向量列表,表示 R 中两个等长向量的第 n 个值之间的整数

标签 r vector concatenation

我想生成一个不相等向量的列表,它们表示两个现有向量 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/

相关文章:

r - 如何创建一个空列表?

c++ - 删除特定索引处的 vector 元素

Python 到 C++ 的字典列表

r - 对具有后向依赖性的 R 循环进行向量化

连续字符串中的 javascript [object Window]

php - 连接和转义字符后输出不完整

r - 在同一 data.frame 中分组/重新编码因子

r - R中绘图的最佳拟合曲线

r - 信息增益测量显示什么?

ruby-on-rails - 在 .erb 文件中使用 link_to,串联语法