我有一个简单的矩阵,如:
> 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 的文档,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,因为它最终会出现"颠倒"的图像.
我有以下包含数字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的矩阵创建这些颜色图表.
我正在尝试粘贴在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矩阵中的对角线).有没有一种有效的方法来做到这一点?
我想使用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 …
我发现了一个令人惊讶的行为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]}因此绝对不是转速的错误.
对此有何解释?
是否有一个简单的工作流来编写将对象存储为.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文件,但即使这样,也有一些自动化可以促进这个过程).