相关疑难解决方法(0)

如何反转R中的矩阵?

我有一个简单的矩阵,如:

> a = matrix(c(c(1:10),c(10:1)), ncol=2)
> a
      [,1] [,2]
 [1,]    1   10
 [2,]    2    9
 [3,]    3    8
 [4,]    4    7
 [5,]    5    6
 [6,]    6    5
 [7,]    7    4
 [8,]    8    3
 [9,]    9    2
[10,]   10    1
Run Code Online (Sandbox Code Playgroud)

我想得到这个结果:

      [,1] [,2]
 [1,]   10    1
 [2,]    9    2
 [3,]    8    3
 [4,]    7    4
 [5,]    6    5
 [6,]    5    6
 [7,]    4    7
 [8,]    3    8
 [9,]    2    9
[10,]    1    10
Run Code Online (Sandbox Code Playgroud)

矩阵的确切反转.我怎么才能得到它?谢谢

r

22
推荐指数
3
解决办法
3万
查看次数

R图像()绘制矩阵旋转?

我一直在阅读R 的文档,image()但我不明白.为什么这个矩阵:

> mat1
     [,1] [,2] [,3]
[1,]    1    0    1
[2,]    0    1    0
[3,]    0    0    0
Run Code Online (Sandbox Code Playgroud)

绘制方式如下:

> image(c(1:3), c(1:3), mat1)
Run Code Online (Sandbox Code Playgroud)

屈服于此:

在此输入图像描述

我怎样才能使布局与印刷矩阵相同?这不仅仅是让转置翻转x和y,因为它最终会出现"颠倒"的图像.

r image

11
推荐指数
2
解决办法
7183
查看次数

在R中将数字矩阵转换为颜色矩阵

我有以下包含数字0-4的4x4数字矩阵:

0  1  0  3
3  2  1  4
4  1  0  2
3  3  0  1
Run Code Online (Sandbox Code Playgroud)

我想了解如何使用R将数字矩阵转换为使用所选颜色和特定方形尺寸(长度x宽度)的颜色矩阵.要清楚,我将颜色矩阵定义为使用彩色方块表示特定值的图形.矩阵方向.来自另一个程序的示例4x4如下:

在此输入图像描述

我必须为数字指定颜色代码,例如:

0 = FFFFFF
1 = 99FF66
2 = 66FF33
3 = 33CC00
4 = 009900
Run Code Online (Sandbox Code Playgroud)

但我不知道从哪里开始把这个放在一起.我想我也必须指定颜色方块的尺寸.

我的目标是能够将数据框导入到R中,最多包含10个数值,并为20x20的矩阵创建这些颜色图表.

r colors matrix

9
推荐指数
1
解决办法
4401
查看次数

粘贴n*n矩阵或数据帧的所有可能对角线

我正在尝试粘贴在N*N矩阵内以任何对角线排列的所有可能的字符.

例如,考虑以下3 X 3矩阵:

#Create matrix, convert to character dataframe
matrix <- matrix(data=c('s','t','y','a','e','l','f','n','e'),nrow=3,ncol=3)
matrix <- as.data.frame(matrix)
for(i in 1:length(colnames(matrix))){
  matrix[,i] <- as.character(matrix[,i])
}
Run Code Online (Sandbox Code Playgroud)

在上面的矩阵中,我需要粘贴对角线:"see","fey","ees"和"yef".我可以使用以下代码在数据框中找到它们:

diag <- paste(matrix[1,1],matrix[2,2],matrix[3,3],sep='')
diag1 <- paste(matrix[1,3],matrix[2,2],matrix[3,1],sep='')
diag2 <- paste(matrix[3,1],matrix[2,2],matrix[1,3],sep='')
diag3 <- paste(matrix[3,3],matrix[2,2],matrix[1,1],sep='')
Run Code Online (Sandbox Code Playgroud)

问题是我想自动化它,以便它可以在任何N x N矩阵上工作.(我正在编写一个函数来查找任何NXN矩阵中的对角线).有没有一种有效的方法来做到这一点?

r dataframe

8
推荐指数
1
解决办法
479
查看次数

使用ggplot创建色盲测试

我想使用ggplot创建一个类似于下面的色盲测试.

在此输入图像描述

基本思想是使用geom_hex(或者可能是voronoi图,或者甚至可能是上图中的圆圈)作为起始点,并定义一个数据帧,当在ggplot中绘制时,生成图像.

我们首先要创建一个数据集,例如:

df <- data.frame(x = rnorm(10000), y = rnorm(10000))
Run Code Online (Sandbox Code Playgroud)

然后绘制这个:

ggplot(df, aes(x, y)) +
  geom_hex() + 
  coord_equal() +
  scale_fill_gradient(low = "red", high = "green", guide = FALSE) +
  theme_void()
Run Code Online (Sandbox Code Playgroud)

如下图所示:

在此输入图像描述

主要的缺失步骤是创建一个实际绘制有意义的符号(字母或数字)的数据集,并且我不确定如何在没有精心绘制坐标的情况下最好地进行此操作.理想情况下,人们可以从图像文件中读取坐标.

最后,稍微整理一下可以通过去除外围点来围绕绘图边缘.

非常欢迎所有的建议!

编辑

更接近我所追求的,我们可以使用下面的字母'e':

在此输入图像描述

使用该imager包,我们可以读取它并将其转换为数据帧:

img <- imager::load.image("e.png")
df <- as.data.frame(img)
Run Code Online (Sandbox Code Playgroud)

然后绘制该数据帧使用geom_raster:

ggplot(df, aes(x, y)) +
  geom_raster(aes(fill = value)) +
  coord_equal() +
  scale_y_continuous(trans = scales::reverse_trans()) +
  scale_fill_gradient(low = "red", high = "green", guide = FALSE) +
  theme_void()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果我们使用geom_hex而不是geom_raster …

r ggplot2

8
推荐指数
1
解决办法
403
查看次数

R中出现意外的应用函数行为

我发现了一个令人惊讶的行为apply,我想知道是否有人可以解释.让我们采取一个简单的矩阵:

> (m = matrix(1:8,ncol=4))
     [,1] [,2] [,3] [,4]
[1,]    1    3    5    7
[2,]    2    4    6    8
Run Code Online (Sandbox Code Playgroud)

我们可以垂直翻转它:

> apply(m, MARGIN=2, rev)
     [,1] [,2] [,3] [,4]
[1,]    2    4    6    8
[2,]    1    3    5    7
Run Code Online (Sandbox Code Playgroud)

这将rev()迭代地将矢量反转函数应用于每列.但是当我们尝试逐行应用时,我们得到:

> apply(m, MARGIN=1, rev)
     [,1] [,2]
[1,]    7    8
[2,]    5    6
[3,]    3    4
[4,]    1    2
Run Code Online (Sandbox Code Playgroud)

..逆时针旋转90度!Apply使用相同的结果,FUN=function(v) {v[length(v):1]}因此绝对不是转速的错误.

对此有何解释?

r apply

5
推荐指数
1
解决办法
639
查看次数

针对存储的R对象进行测试

是否有一个简单的工作流来编写将对象存储为.rds或.rda的测试,以便将来运行的测试可以比较代码执行的结果与存储的对象?这样可以很容易地检查返回有些复杂值的函数是否仍然按预期运行.

例如,类似于:

test_obj(res <- lm(y ~ x, data.frame(x=1:3, y=5:7)))
Run Code Online (Sandbox Code Playgroud)

如果*extdata/test_obj.res.rds*不存在,将在*inst/extdata/test_obj.res.rds*中创建它,res从上面开始,但如果确实存在,则会相同/ all.equal等新生成的对象与从rds中恢复的对象.

我会发现这样的测试超级有用,我有点惊讶RUnit/svUnit/test没有实现某种类型的东西(我希望他们这样做,我只是没有找到它).

testthat::make_expectation是接近,但我更喜欢有自动存储/检索rds,而不是将文本表示复制粘贴到文件,我认为你应该如何使用testthat::make_expectation(我想我可以管道stdout()到一个. R文件,但即使这样,也有一些自动化可以促进这个过程).

r testthat unitizer

2
推荐指数
1
解决办法
210
查看次数

标签 统计

r ×7

apply ×1

colors ×1

dataframe ×1

ggplot2 ×1

image ×1

matrix ×1

testthat ×1

unitizer ×1