【问题标题】:R language iteratively input a matrixR语言迭代输入一个矩阵
【发布时间】:2020-05-22 13:06:22
【问题描述】:

我正在尝试弄清楚如何迭代加载矩阵(这是我无法在此处重现的更大函数的一部分)。

假设我创建了一个矩阵:

 m <- matrix(c(1:9), nrow = 3, ncol = 3)
 m

这个矩阵可以命名为“m”、“x”或其他任何名称。然后,我需要在函数中迭代加载矩阵:

 if (interactive() ) { mat <- 
     readline("Your matrix, please: ")
 }

到目前为止,函数“知道”矩阵的名称,因为mat 返回[1] "m",并且是ls() 中列出的对象。但是当我尝试获取矩阵值时,例如通过x &lt;- get(mat) 我不断收到错误

get(mat) 中的错误:未使用的参数 (mat)

谁能告诉我我在这里做错了什么?

【问题讨论】:

  • 可能想从这里开始,了解如何创建一个空矩阵,它还会为您提供一些关于如何完成循环的线索。 stackoverflow.com/questions/21585721/…,还有get 不会做你认为的那样。
  • 在 R 中迭代地加载几乎任何东西可能是错误的处理方式。在这种情况下,为什么不只是:x = mat

标签: r input upload


【解决方案1】:

1) 假设您的意思是交互式,而不是迭代,

get_matrix <- function() {
  nr <- as.numeric(readline("how many rows? "))
  cat("Enter space separated data row by row. Enter empty row when finished.\n")
  nums <- scan(stdin())
  matrix(nums, nr, byrow = TRUE)
}
m <- get_matrix()

这是一个测试:

> m <- get_matrix()
how many rows? 3
Enter space separated data row by row. Enter empty row when finished.
1: 1 2
3: 3 4
5: 5 6
7: 
Read 6 items

> m
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6
> 

2) 另一种可能性是要求用户使用 R 创建一个矩阵,然后只给出矩阵的名称:

get_matrix2 <- function(envir = parent.frame()) {
  m <- readline("Enter name of matrix: ")
  get(m, envir)
}

测试一下:

> m <- matrix(1:6, 3)
> mat <- get_matrix2()
Enter name of matrix: m
> mat
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多