天道酬勤,学无止境

Check if vector in a matrix

I have a matrix

new<-matrix(9,4,4)
new[1,1]<-0

v1<-c(0,0)

new thus looks like this:

0 9 9 9 
9 9 9 9
9 9 9 9
9 9 9 9

I now want to check if this matrix contains the vector v1. So I did

v1 %in% new 

and obtain TRUE TRUE although I would like to check the whole vector of two zeros in a row/ column and thus would like to get a FALSE.

标签

评论

You can use rollapply from zoo to test if matrix contains a vector:

library(zoo)
any(apply(new, 2, rollapply, length(v1), identical, v1))
#[1] FALSE

new[2,1] <- 0
any(apply(new, 2, rollapply, length(v1), identical, v1))
#[1] TRUE

You can use a combination of isTRUE and all.equal, while intersect the vector with the matrix i.e.

isTRUE(all.equal(v1, intersect(v1, new)))
#[1] FALSE

v2 <- c(0, 9)
all.equal(v2, intersect(v2, new))
#[1] TRUE

Is this what you want?

The vector has two values, so if you want to check whether it is contained in the matrix you will have to paste the two values together to obtain 0,0:

paste0(v1, collapse = ",") %in% new
[1] FALSE

or this, which compares the string 0,0 from the pasted-together vector to the pasted-together rows of the matrix:

paste0(v1, collapse = ",") %in% apply(new, 2, paste0, collapse = ",")
[1] FALSE

or this, which searches for 0,0 in the corresponding pairs of two digts separated by comma in the pasted-together rows of the matrix:

library(stringr)
paste0(v1, collapse = ",") %in% unlist(str_split(apply(new, 2, paste0, collapse = ","), "(?<=\\d,\\d),(?=\\d,\\d)"))

This latter solution seems the most likely as it searches for 0,0 %in% this vector, which is the output of unlist(str_split(apply(new, 2, paste0, collapse = ","), "(?<=\\d,\\d),(?=\\d,\\d)")):

[1] "0,9" "9,9" "9,9" "9,9" "9,9" "9,9" "9,9" "9,9"

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • VHDL 中的可合成多维数组(Synthesizable multidimensional arrays in VHDL)
    问题 我需要使用多维数组来表示我的设计中的矩阵。 我已经尝试了两个可用的选项: 声明数组数组type t11 is array (0 to c1_r2) of std_logic_vector(31 downto 0); type t1 is array (0 to r1) of t11; --r1*c1_r2 matrix 多维数组。 type matrix is array (natural range <>, natural range <>) of std_logic_vector(31 downto 0); 但是,在这两种情况下,我在 xilinx 中的后期综合模拟都给了我错误“切片名称仅允许在一维数组上使用”。 在可综合 vhdl 设计中使用多维数组的正确方法是什么? 欢迎任何意见。 我正在使用 Xilinx ISE 附带的 XST 合成器。 我正在索引 i 和 j,因为我的矩阵维度是 m * n * 32。 我在实体中的净 a_in a_in: in matrix (0 to size - 1, 0 to size - 1); 被修改为 a_in : in STD_LOGIC_VECTOR3 ( 1 downto 0 , 1 downto 0 , 31 downto 0 ); 在我的程序中,我从矩阵中访问 k 和 m 的两个生成语句中的值,如下所示: add
  • 《MATLAB基础篇》第二章:向量、矩阵
    目录 (1) 数组(1.1) 数组的创建(1.2) 数组的基本操作 (2) 矩阵(2.1) 矩阵的创建(2.2) 矩阵的基本操作 (1) 数组 (1.1) 数组的创建 用方括号“[]”阔起,逗号“,”或空格“ ”分隔列,分号“;”分隔行建立数组: clc;clear; A = [1 2 3 4 5]; b1 = A(3) %数组第3个元素。 b2 = A(2:4) %数组第2到第4个元素。 b3 = A(3:end) %数组第3个到最后一个元素。 b4 = A(3:-1:1) %数组第3到第1个元素。 b5 = A(end:-1:1) %数组反序输出。 b6 = A([2,4]) %数组第2个和第4个元素。 >> b1 = 3 b2 = 2 3 4 b3 = 3 4 5 b4 = 3 2 1 b5 = 5 4 3 2 1 b6 = 2 4 用冒号“:”来创建数组: arr = 初值:步长:终值; %步长缺省值为1. (1.2) 数组的基本操作 isempty(A):检测数组是否为空数组。 isscalar(A):检测数组是否是单个元素的标量。 isvector(A):检测数组是否是行向量或列向量。 isrow(A):检测数组是否是行向量。 iscolumn(A):检测数组是否是列向量。 issparse(A):检测数组是否是稀疏矩阵。 isnumeric(A)
  • check whether matrix rows equal a vector in R , vectorized
    I'm very surprised this question has not been asked, maybe the answer will clear up why. I want to compare rows of a matrix to a vector and return whether the row == the vector everywhere. See the example below. I want a vectorized solution, no apply functions because the matrix is too large for slow looping. Suppose there are many rows as well, so I would like to avoid repping the vector. set.seed(1) M = matrix(rpois(50,5),5,10) v = c(3 , 2 , 7 , 7 , 4 , 4 , 7 , 4 , 5, 6) M [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 4 8 3 5 9 4 5 6 7 7 [2,] 4 9 3 6 3 1 5 7 6 1 [3,] 5 6 6 11 6 4 5
  • 检查矩阵行是否等于 R 中的向量,向量化(check whether matrix rows equal a vector in R , vectorized)
    问题 我很惊讶这个问题没有被问到,也许答案会澄清原因。 我想将矩阵的行与向量进行比较,并返回行是否无处不在。 请参阅下面的示例。 我想要一个矢量化的解决方案,没有应用函数,因为矩阵对于慢速循环来说太大了。 假设也有很多行,所以我想避免重复向量。 set.seed(1) M = matrix(rpois(50,5),5,10) v = c(3 , 2 , 7 , 7 , 4 , 4 , 7 , 4 , 5, 6) M [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 4 8 3 5 9 4 5 6 7 7 [2,] 4 9 3 6 3 1 5 7 6 1 [3,] 5 6 6 11 6 4 5 2 7 5 [4,] 8 6 4 4 3 8 3 6 5 6 [5,] 3 2 7 7 4 4 7 4 5 6 输出应该是 FALSE FALSE FALSE FALSE TRUE 回答1 一种可能性是 rowSums(M == v[col(M)]) == ncol(M) ## [1] FALSE FALSE FALSE FALSE TRUE 或者同样 rowSums(M == rep(v, each = nrow(M))) == ncol(M) ## [1] FALSE FALSE FALSE FALSE TRUE 或者
  • Finding duplicates using Rcpp
    I'm trying to find a speedier replacement for finding duplicates in R. The intent of the code is to pass the matrix to Rcpp with a row number from that matrix, then loop through the entire matrix looking for a match for that row. The matrix in question is a Logical matrix with 1000 rows and 250 cols. Sounds simple, but the code below is not detecting equivalent vector rows. I'm not sure if it's an issue with the equal() function or something in how the matrix or vectors are defined. #include <Rcpp.h> using namespace Rcpp; // [[Rcpp::plugins]] #include <cstddef> // std:size_t #include <iterator
  • 教你一点点掌握视觉三维重建-colmap 重要代码逐行解析(大纲-预热阶段)
    教你一点点掌握视觉三维重建-colmap 重要代码逐行解析 这里以colmap 框架为准,主要对其重要环节代码结合自己的想法进行逐一讲解,colmap 作为目前state-of-the-art 的视觉重建pipeline,本人将其代码分为两个大环节:前端和后端.前端主要是特征提取和匹配,后端包括三角化,Register,BA等环节. 完成时间deadline:12月底;这里以博客为证,如果您感觉到这份博客帮助到您,希望给予鼓励,我也会利用周末及其下班时间尽快完成整个文章的撰写 -欢迎关注B站:橙子的RGB空间,B 站后续也会同步每一章节的视频讲解,同时B站有很多成果视频可以提供大家观看!!! 目录 特征提取 特征匹配 三角化或前方交会 运动恢复 光束法平差 前端 feature extracting sift-GPU 算法 待写 DSP-SIFT算法 待写 Domain-size pooling SIFT 是从多个尺度的SIFT 描述子进行一个平均, 参考论文:Domain-Size Pooling in Local Descriptors and Network Architectures, 其已被证明优于其他SIFT算法的变种及一些深度学习算子. feature matching 匹配方法 待写 几何验证-剔除outliers 1 . 对于标定相机,利用E/F 、H/F 、H
  • Python:检查mongoDB数据库文档之间的余弦相似度(Python: check cosine similarity between mongoDB database documents)
    问题 我正在使用蟒蛇。 现在我有一个 mongoDB 数据库集合,其中所有文档都有这样的格式: {"_id":ObjectId("53590a43dc17421e9db46a31"), "latlng": {"type" : "Polygon", "coordinates":[[[....],[....],[....],[....],[.....]]]} "self":{"school":2,"home":3,"hospital":6} } 其中“self”字段表示Polygon中的场地类型以及对应场地类型的数量。 不同的文档有不同的 self 字段,例如 {"KFC":1,"building":2,"home":6}, {"shopping mall":1, "gas station":2} 现在我需要计算两个文档的两个“self”字段之间的余弦相似度。 之前,我所有的文档都以字典的形式保存在一个pickle文件中,我使用以下代码来计算相似度: vec = DictVectorizer() total_arrays = vec.fit_transform(data + citymap).A vector_matrix = total_arrays[:len(data)] citymap_base_matrix = total_arrays[len(data):] def cos
  • Python: check cosine similarity between mongoDB database documents
    I am using python. Now I have a mongoDB database collection, in which all documents have such a format: {"_id":ObjectId("53590a43dc17421e9db46a31"), "latlng": {"type" : "Polygon", "coordinates":[[[....],[....],[....],[....],[.....]]]} "self":{"school":2,"home":3,"hospital":6} } In which the field "self" indicates the venue types in the Polygon and the number of corresponding venue types. different documents have different self field, such as {"KFC":1,"building":2,"home":6}, {"shopping mall":1, "gas station":2} Now I need to calculate the cosine similarity between two "self" fields of two
  • 为什么向量的类别是向量的元素类别而不是向量本身?(Why is the class of a vector the class of the elements of the vector and not vector itself?)
    问题 我不明白为什么向量的类别是向量元素的类别,而不是向量本身。 vector <- c("la", "la", "la") class(vector) ## [1] "character" matrix <- matrix(1:6, ncol=3, nrow=2) class(matrix) ## [1] "matrix" 回答1 这就是我从中得到的。 class主要用于面向对象的编程,R中还有其他功能可以为您提供对象的存储mod(请参见?typeof或?mode )。 在看?class 许多R对象都有一个class属性,一个字符向量给出了该对象继承自的类的名称。 如果对象没有类属性,则它具有隐式类“矩阵”,“数组”或mode(x)的结果 看来class工作方式如下 它首先寻找$class属性如果不存在,它将通过检查$dim属性(在vector不存在)来检查对象是否具有matrix或array结构。 2.1。 如果$dim包含两个条目,则将其称为matrix 2.2。 如果$dim包含一个条目或两个以上条目,则将其称为array 2.3。 如果$dim的长度为0,则转到下一步( mode ) 如果$dim的长度为0并且没有$class属性,它将执行mode 所以根据你的例子 mat <- matrix(rep("la", 3), ncol=1) vec <- rep("la"
  • 如何在伽罗瓦域中找到矩阵的行秩?(How to find the row rank of matrix in Galois fields?)
    问题 Matlab 有一个内置函数,用于计算具有十进制数和有限域数的矩阵的秩。 但是,如果我没有错,他们只计算最低等级(行等级和列等级中的最低等级)。 我只想计算行秩,即找到矩阵的独立行数(在我的情况下为有限域)。 有没有功能或方法可以做到这一点? 回答1 在线性代数中,列秩和行秩始终相等(参见证明),因此只需使用 rank (如果您正在计算 Galois 域上的矩阵的秩,请考虑使用 gfrank,就像@DanBecker 在他的评论中建议的那样): 例子: >> A = [1 2 3; 4 5 6] A = 1 2 3 4 5 6 >> rank(A) ans = 2 也许所有三列似乎都是线性无关的,但它们是相关的: [1 2; 4 5] \ [3; 6] ans = -1 2 意思是-1 * [1; 4] + 2 * [2; 5] = [3; 6] -1 * [1; 4] + 2 * [2; 5] = [3; 6] 回答2 施瓦茨, 两条评论: 您在评论中声明“秩函数在伽罗瓦域中也能正常工作!” 我不认为这是正确的。 考虑gfrank文档页面上给出的示例: A = [1 0 1; 2 1 0; 0 1 1]; gfrank(A,3) % gives answer 2 rank(A) % gives answer 3 但有可能我误解了事情! 您还说“如何检查矩阵的行是否线性无关
  • 从欠定系统中去除无法解的方程(Removing unsolvable equations from an underdetermined system)
    问题 我的程序试图求解一个线性方程组。 为了做到这一点,它组合了矩阵coeff_matrix和向量value_vector ,并使用 Eigen 来解决它们,如: Eigen::VectorXd sol_vector = coeff_matrix .colPivHouseholderQr().solve(value_vector); 问题是该系统既可以是过度确定的,也可以是欠确定的。 在前一种情况下,Eigen 要么给出正确的解决方案,要么给出不正确的解决方案,我使用coeff_matrix * sol_vector - value_vector检查解决方案。 但是,请考虑以下方程组: a + b - c = 0 c - d = 0 c = 11 - c + d = 0 在这种特殊情况下,Eigen 正确求解了后三个方程,但也给出了a和b 。 我想实现的是,只有只有一个解的方程才会被求解,其余的(这里的第一个方程)将保留在系统中。 换句话说,我正在寻找一种方法来找出当时在给定的方程组中哪些方程可以求解,哪些不能求解,因为会有多个解。 你能提出任何实现这一目标的好方法吗? 编辑:请注意,在大多数情况下,矩阵不会是方形的。 我在这里又添加了一行只是为了注意过度决定也可能发生。 回答1 我认为你想要的是奇异值分解(SVD),它会给你你想要的。 SVD后,“求解只有一个解的方程”,解为伪逆
  • 如何从矩阵中找到线性独立的行(How to find linearly independent rows from a matrix)
    问题 如何从矩阵中识别线性​​独立的行? 例如, 第四行是独立的。 回答1 首先,您的第三行与第一行和第二行线性相关。 但是,您的第一列和第四列是线性相关的。 您可以使用两种方法: 特征值 如果矩阵的一个特征值是零,则其对应的特征向量是线性相关的。 文档eig指出,返回的特征值将根据其多重性进行重复,并且不一定是有序的。 但是,假设特征值与您的行向量相对应,则一种方法是: import numpy as np matrix = np.array( [ [0, 1 ,0 ,0], [0, 0, 1, 0], [0, 1, 1, 0], [1, 0, 0, 1] ]) lambdas, V = np.linalg.eig(matrix.T) # The linearly dependent row vectors print matrix[lambdas == 0,:] Cauchy-Schwarz不等式 要测试向量的线性相关性并找出哪个向量,可以使用Cauchy-Schwarz不等式。 基本上,如果向量的内积等于向量范数的乘积,则向量是线性相关的。 这是列的示例: import numpy as np matrix = np.array( [ [0, 1 ,0 ,0], [0, 0, 1, 0], [0, 1, 1, 0], [1, 0, 0, 1] ]) print np
  • 线性代数: 什么是矩阵,以及矩阵的线性代数意义
    多数高中生学习矩阵和矩阵乘法,但是他们往往不知道为什么矩阵乘法是这样工作的。 添加矩阵很简单: 只需添加相应的条目。 然而,矩阵乘法并不是这样工作的,对于一个不理解矩阵背后理论的人来说,这种矩阵相乘的方法可能看起来非常不自然和奇怪。 为了真正理解矩阵,我们把它们看作是更大图景的一部分。 矩阵表示空间之间的函数,称为向量空间,也不是任何函数,而是线性函数。 这实际上就是线性代数关注矩阵的原因。 关于矩阵的两个基本事实是: 每个矩阵表示一个线性函数,每个线性函数表示一个矩阵。 因此,实际上在矩阵和线性函数之间存在双射。 我们将说明,乘法矩阵对应于对它们所表示的函数进行合成。接下来,我们将研究矩阵有什么好处,以及为什么线性代数首先兴起。 最有可能的是,如果你在高中学过代数,你会看到下面这些东西: 你的高中代数老师可能告诉你这是一个“矩阵” 然后你学习了如何用矩阵做事情。 例如,你可以相加两个矩阵,操作相当直观: 你也可以减去矩阵,它的工作原理类似。 你可以用一个数字乘以一个矩阵: 然后,当你学习如何乘法矩阵时,一切似乎都错了: 也就是说,要找到乘积的第 i 行, j 列中的条目,你看第一个矩阵的第i行,第二个矩阵的第 j列,你把它们的相应数字相乘,然后你把结果加起来,得到那个位置的条目。 在上面的例子中,第一行和第二列的条目结果是 4,因为第一个矩阵的第一行是,第二个矩阵的第二列是。
  • 如何计算R中向量的欧几里德范数?(how to calculate the Euclidean norm of a vector in R?)
    问题 我尝试了norm ,但我认为它给出了错误的结果。 ( c(1, 2, 3)的范数是sqrt(1*1+2*2+3*3) ,但它返回6 .. x1 <- 1:3 norm(x1) # Error in norm(x1) : 'A' must be a numeric matrix norm(as.matrix(x1)) # [1] 6 as.matrix(x1) # [,1] # [1,] 1 # [2,] 2 # [3,] 3 norm(as.matrix(x1)) # [1] 6 有谁知道计算 R 中向量范数的函数是什么? 回答1 这是自己编写的一个微不足道的函数: norm_vec <- function(x) sqrt(sum(x^2)) 回答2 norm(c(1,1), type="2") # 1.414214 norm(c(1, 1, 1), type="2") # 1.732051 回答3 我很惊讶没有人尝试分析上述建议方法的结果,所以我这样做了。 我使用了一个随机统一函数来生成一个列表并将其用于重复(只是信封类型基准的简单背面): > uut <- lapply(1:100000, function(x) {runif(1000, min=-10^10, max=10^10)}) > norm_vec <- function(x) sqrt(sum(x^2)) >
  • C++ Armadillo 访问三角矩阵元素(C++ Armadillo Access Triangular Matrix Elements)
    问题 访问犰狳矩阵的上三角或下三角元素的最有效(即平衡内存和速度)方法是什么? 我知道我可以为元素提供一个整数向量,但是当矩阵变得非常大时,我想避免携带另一个大向量。 或者有没有一种有效的方法来快速创建下/上三角指数? 例如使用 5x5 矩阵 // C++11 Initialization arma::mat B = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }; B.reshape(5,5); // the matrix //1 6 11 16 21 //2 7 12 17 22 //3 8 13 18 23 //4 9 14 19 24 //5 10 15 20 25 我想拉下三角形中的元素,结果向量将是: 2 3 4 5 8 9 10 14 15 20 我现在能想到的唯一解决方案是使用uvec对象。 例如: arma::uvec idx {1,2,3,4,7,8,9,13,14,19); arma::vec lower_elems = B.elem(idx); 最终对象不需要是向量。 我只需要能够访问元素进行各种比较。 作为一个简单的例子,假设我想检查它们是否都等于 0。 回答1 要检查下三角形中的所有元素是否都为零: bool all
  • calculate sum of Nth column of numpy array entry grouped by the indices in first two columns?
    I would like to loop over following check_matrix in such a way that code recognize whether the first and second element is 1 and 1 or 1 and 2 etc? Then for each separate class of pair i.e. 1,1 or 1,2 or 2,2, the code should store in the new matrices, the sum of last element (which in this case has index 8) times exp(-i*q(check_matrix[k][2:5]-check_matrix[k][5:8])), where i is iota (complex number), k is the running index on check_matrix and q is a vector defined as given below. So there are 20 q vectors. import numpy as np q= [] for i in np.linspace(0, 10, 20): q.append(np.array((0, 0, i))) q
  • R中两个向量之间的角度(Angle between two vectors in R)
    问题 用编程语言R计算两个向量之间的夹角最有效的方法是什么? 回答1 如果您安装/上传库(matlib):有一个名为angle(x,y,degree = TRUE)的函数,其中x和y是向量。 注意:如果您具有矩阵形式的x和y,请使用as.vector(x)和as.vector(y): library(matlib) matA <- matrix(c(3, 1), nrow = 2) ##column vectors matB <- matrix(c(5, 5), nrow = 2) angle(as.vector(matA), as.vector(matB)) ##default in degrees, use degree = FALSE for radians 回答2 根据本PDF的第5页, sum(a*b)是查找向量a和b的点积的R命令,而sqrt(sum(a * a))是查找向量a的范数的R命令。 ,而acos(x)是反余弦的R命令。 因此,用于计算两个向量之间的角度的R代码为 theta <- acos( sum(a*b) / ( sqrt(sum(a * a)) * sqrt(sum(b * b)) ) ) 回答3 我的回答包括两个部分。 第1部分是数学-使线程的所有读者更清楚,并使后面的R代码易于理解。 第2部分是R编程。 第1部分-数­
  • 矩阵变换; 概念和理论,有没有免费的资源可用于实践学习? [关闭](Matrix transforms; concepts and theory, are there any free resources for learning practically? [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 5年前关闭。 改善这个问题 最近,我一直很乐于从坐标绘制图表和图形,并且我对使用矩阵转换坐标空间着迷。 我已经能够成功缩放和反转二维坐标空间,但是现在我的胃口大开了。 :) 在哪里可以找到有关矩阵,矩阵数学的清晰,有意义的(免费)教育材料,尤其是适用于2维和3维空间的材料? 回答1 原始答案:我不确定您是否喜欢数学课程通常引入矩阵的方式。 作为程序员,您可能会更乐于获取任何体面的3D图形书籍。 它当然应该具有非常具体的3x3矩阵。 另外,找出那些将教您投影变换的方法(投影几何是低维几何的一个非常漂亮的区域,易于编程)。 使用Python 3进行矩阵数学的迷你课程 内容: 矩阵[Vector, __add__, reflect_y, rotate, dilate, transform] 矩阵:已重载[Matrix, __add__, __str__, __mul__, zero, det, inv, __pow__] 奖励:复数矩阵:(R)演化。 已经在制作中了(最后有一个摘要) 前言:根据我的教学经验,我认为别人推荐的课程都是很好的课程。 这意味着,如果您的目标是像数学家一样理解矩阵,那么您应该一定要学习整个课程。 但是,如果您的目标比较谦虚
  • 在MATLAB中找到两个向量之间的交点(Find point of intersection between two vectors in MATLAB)
    问题 我有一个非常简单的MATLAB问题。 找到两个向量之间的交点的最简单方法是什么。 我不熟悉各种MATLAB函数-似乎应该为此使用一个。 例如,如果我有一个向量从(0,0)到(6,6),另一个向量从(0,6)到(6,0),我需要确定它们在(3,3)处相交。 回答1 一种解决方案是使用本教程中得出的方程式以二维方式查找两条线的交点(更新:由于站点不再存在,因此这是一个Internet归档链接)。 您可以首先创建两个矩阵:一个保存线端点的x坐标,另一个保存y坐标。 x = [0 0; 6 6]; %# Starting points in first row, ending points in second row y = [0 6; 6 0]; 来自上述来源的方程式可以如下进行编码: dx = diff(x); %# Take the differences down each column dy = diff(y); den = dx(1)*dy(2)-dy(1)*dx(2); %# Precompute the denominator ua = (dx(2)*(y(1)-y(3))-dy(2)*(x(1)-x(3)))/den; ub = (dx(1)*(y(1)-y(3))-dy(1)*(x(1)-x(3)))/den; 现在,您可以计算两条线的交点: xi = x(1)
  • 矩阵和向量形式的数据点数(The number of data points in matrix and vector forms)
    问题 假定X包含1000行与m列,其中m等于3如下: set.seed(5) X <- cbind(rnorm(1000,0,0.5), rnorm(1000,0,0.5), rnorm(1000,0,0.5)) 执行变量选择后,将在执行下一个操作之前检查条件,如下所示。 if(nrow(X) < 1000){print(a+b)} ,其中a为5, b为15,因此,如果nrow(X) < 1000为TRUE ,则将输出20。 但是,如果X恰好是一个矢量,因为只选择了一列, 当X可以是矩阵或向量时,如何检查数据点的数量? 我能想到的是 if(is.matrix(X)){ n <- nrow(X) } else { n <- length(X)} if(n < 1000){print(a+b)} 有人有更好的主意吗? 谢谢 回答1 两种情况下都可以使用NROW 。 来自?NROW nrow和ncol返回行或列的数量存在于x 。 NCOL和NROW将矢量作为1列矩阵进行相同的处理。 因此,这意味着即使将子集放到一个向量中,只要x是数组,向量或数据帧, NROW都会将其视为一个NROW矩阵。 sub1 <- X[,2:3] is.matrix(sub1) # [1] TRUE NROW(sub1) # [1] 1000 sub2 <- X[,1] is.matrix(sub2) # [1]