微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 R 中构建特定的名称向量

如何解决在 R 中构建特定的名称向量

我有 n*m 形式的变量 x = (i,j,a,b) 其中 i,j=1,...,na,b=1,m。 我们总是有 i<=ja<=b

它们形成了我想在 R 中构建的(稀疏)矩阵的行名。 例如,第一行称为 1,1,1,第二行称为 1,2。 自 2,1 起不会调用任何行 i<=j,同样自 1,2,3,2 起不会调用任何行 a<=b

如何在矩阵中自动设置这些行名。顺序不重要。

解决方法

在这里编造一些数据。但是您可以使用 expand.grid() 创建所有可能的组合,然后根据您的规则排除不需要的组合。然后构造一个字符向量,作为矩阵行名的标签。

X <- expand.grid(i = 1:3,j = 1:3,a = 1:3,b = 1:3) %>%
    filter(i <= j & a <= b) %>%
    mutate(label = paste(i,j,a,b,sep = ",")) %>%
    pull(label)

matrix(data = NA,nrow = length(X),ncol = 4,dimnames = list(X))

输出的前几行

        [,1] [,2] [,3] [,4]
1,1,1   NA   NA   NA   NA
1,2,1   NA   NA   NA   NA
2,3,1   NA   NA   NA   NA
,

也许你可以试试下面的代码

n <- 2
m <- 3

p <- subset(expand.grid(rep(list(seq(n)),2)),Var1 <= Var2)
q <- subset(expand.grid(rep(list(seq(m)),Var1 <= Var2)

with(
  expand.grid(1:nrow(p),1:nrow(q)),cbind(p[Var1,],q[Var2,])
)

给出

    Var1 Var2 Var1 Var2
1      1    1    1    1
3      1    2    1    1
4      2    2    1    1
1.1    1    1    1    2
3.1    1    2    1    2
4.1    2    2    1    2
1.2    1    1    2    2
3.2    1    2    2    2
4.2    2    2    2    2
1.3    1    1    1    3
3.3    1    2    1    3
4.3    2    2    1    3
1.4    1    1    2    3
3.4    1    2    2    3
4.4    2    2    2    3
1.5    1    1    3    3
3.5    1    2    3    3
,

这是尝试解决您的问题:

n = 2
m = 2
i = 1
a = 1

df <- expand.grid(i:n,i:n,a:m,a:m)
df[ !(df$Var1 > df$Var2 | df$Var3 > df$Var4),]
apply(df,paste,collapse = ' ')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?