我正在尝试创建一个比较两个矩阵的函数。它将比较两个矩阵在某个位置的元素,并返回“大于”、“等于”或“小于”。下面是我现在的代码。然而,当我尝试调用该函数时,R没有返回任何东西,甚至没有错误消息。我想知道为什么会这样。任何建议都将是有益的。谢谢。
fxn <- function(x, y) {
emptymatrix <- matrix( , nrow = dim(x)[1], ncol = dim(x)[2])
for (i in 1:dim(emptymatrix)[1]) {
for (j in 1:dim(emptymatrix)[2]) {
if (x[i, j] < y[i, j]) {
emptymatrix[i, j] <- "Less Than"
}else if (x[i, j] == y[i, j]) {
emptymatrix[i, j] <- "Equal to"
}else {
emptymatrix[i, j] <- "Greater than"
}
}
}
}
#trying to test the function
vecc1 <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
vecc2 <- c(4, 5, 2, 3, 1, 1, 8, 9, 10)
matrix1 <- matrix(vecc1, nrow = 3, byrow = T)
matrix2 <- matrix (vecc2, nrow=3, byrow = T)
fxn(matrix1, matrix2)
2条答案
按热度按时间jjjwad0x1#
正如SamR在他的评论中指出的,你的函数不返回任何东西,因为它最终没有返回函数/对象。他关于循环的说法也是正确的,因为R主要是为表格数据和矩阵设计的,所以它可以为你做很多事情。2这是一个很好的例子,说明了R的一些设计原则。3首先,我们不要'我不需要使用for循环,因为我们可以在所有索引上计算larger equal less输出将是具有TRUE / FALSE的大小为M的矩阵。我们可以使用该矩阵在所有TRUE位置索引我们的新矩阵。而我们只需要分配单个字符串“等于”、“大于”、或者“更少”,其被再循环到较长向量(/list)的长度。
axr492tv2#
未从函数返回
emptyMatrix
。在R中,函数中最后一条语句的结果是自动返回的。在原始函数中,最后一条语句是
for
循环,其值为NULL。它被返回,标记为“不可见”,所以它不打印。在R中,通常的约定是输入你想要返回的对象的名称,如果它不是最后一个生成的值,那么只需在你的函数中添加一行,包含
emptyMatrix
。您也可以调用
return(emptyMatrix)
,但这实际上效率较低。如果你喜欢像
for
循环那样返回一些不可见的东西,你可以在最后一行调用invisible(emptyMatrix)
,这样它就不会自动打印出来,但是你仍然可以把它赋给另一个变量。