在R中字符串的每个第k个位置插入字符

在R中字符串的每个第k个位置插入字符,r,matrix,format,R,Matrix,Format,我有一个nxn方阵,其中n是一个完美的正方形。我想在每个k^th位置插入一条垂直线,其中k是n的平方根,并使用R打印结果 大多数情况下,我都可以实现这一点,但是在每行的末尾,我会得到一个NULL 这是我的密码 # create test matrix set.seed(1) temp = matrix(sample(x=(11:99), size= 81), 9, 9) # function to place “|” in every kth position of each row cust

我有一个
nxn
方阵,其中
n
是一个完美的正方形。我想在每个
k^th
位置插入一条垂直线,其中
k
n
的平方根,并使用
R
打印结果

大多数情况下,我都可以实现这一点,但是在每行的末尾,我会得到一个
NULL

这是我的密码

# create test matrix
set.seed(1)
temp = matrix(sample(x=(11:99), size= 81), 9, 9)

# function to place “|” in every kth position of each row
custom_print = function(x){

  s = as.integer(sqrt(nrow(x)))

  for(r in 1:nrow(x)){
      for(c in 1:s){
        current.row = cat("|", x[r, (s*(c-1)+1):(c*s)], "")
      }
    print(current.row)
  }
}

custom_print(temp)
这将产生以下输出:

> custom_print(temp)
| 34 15 37 | 99 53 85 | 13 50 62 NULL
| 43 27 92 | 64 16 12 | 14 58 32 NULL
| 60 24 75 | 31 71 97 | 66 17 18 NULL
| 89 63 25 | 39 70 41 | 57 22 67 NULL
| 28 40 54 | 45 51 38 | 52 74 33 NULL
| 86 68 19 | 69 42 29 | 23 83 90 NULL
| 96 47 95 | 21 91 98 | 81 79 80 NULL
| 65 87 35 | 56 36 93 | 46 55 20 NULL
| 61 82 11 | 84 72 76 | 94 26 44 NULL
我不知道我在每行末尾得到
NULL
的原因,也不知道如何删除它


有人能告诉我哪里出错吗?

您得到
NULL
的原因是
cat
打印文本并返回
NULL

temp <- cat('x1')
#x1
temp
NULL

出于兴趣,不使用循环就可以这样做,并且可以推广到任意nxn矩阵,其中n是一个完美的平方。它使用了一些模块化数学和索引算法:

print_square <- function(mat)
{
  k <- length(mat)^(1/4)
  m <- matrix("|", k^2, k*(k+1))
  m[seq_along(mat) + ((seq_along(mat) - 1) %/% k^3) * k^2] <- mat
  m[length(m) - (k^2 - 1):0] <- "\n"
  cat("", t(m))
}


在本例中可能不是问题所在,但您可能希望对s进行四舍五入,因为通常它不是整数。在这种情况下,它应该是,但你永远不会知道浮点计算。@JanvanderLaan感谢你的建议,但是我修改了代码,强制s为整数,但问题仍然存在。
print_square <- function(mat)
{
  k <- length(mat)^(1/4)
  m <- matrix("|", k^2, k*(k+1))
  m[seq_along(mat) + ((seq_along(mat) - 1) %/% k^3) * k^2] <- mat
  m[length(m) - (k^2 - 1):0] <- "\n"
  cat("", t(m))
}
print_square(temp)
#>  78 31 43 | 67 98 28 | 27 86 37 
#>  49 64 45 | 33 91 32 | 23 95 29 
#>  11 84 52 | 16 79 57 | 66 22 13 
#>  44 17 48 | 72 89 99 | 26 58 76 
#>  53 83 30 | 50 34 97 | 81 74 56 
#>  24 47 38 | 73 42 60 | 51 36 20 
#>  92 85 77 | 35 94 71 | 62 88 46 
#>  69 96 68 | 65 12 63 | 75 80 59 
#>  61 54 82 | 70 55 21 | 87 19 40 
print_square(matrix(sample(256) + 100, 16, 16))
#>  263 151 178 305 | 156 293 177 252 | 210 352 136 274 | 173 244 235 226 
#>  248 219 171 162 | 337 108 259 110 | 256 155 285 109 | 113 334 346 251 
#>  250 309 228 217 | 257 183 339 288 | 260 180 152 224 | 181 345 119 290 
#>  221 329 159 145 | 102 147 130 106 | 103 327 165 348 | 170 194 312 124 
#>  269 340 319 268 | 229 192 126 287 | 242 188 298 131 | 167 137 294 203 
#>  186 225 190 166 | 160 212 209 230 | 325 350 213 172 | 295 176 333 281 
#>  311 280 258 141 | 169 336 107 200 | 198 335 175 246 | 279 114 286 163 
#>  208 189 158 353 | 317 146 271 347 | 277 320 354 182 | 211 341 297 112 
#>  118 301 115 236 | 140 239 127 296 | 270 187 111 220 | 261 207 116 307 
#>  144 249 214 125 | 241 275 143 343 | 245 238 276 282 | 302 123 318 195 
#>  267 121 164 355 | 299 314 237 265 | 216 149 148 289 | 128 303 196 168 
#>  129 179 234 222 | 232 184 300 272 | 231 122 157 139 | 310 356 153 254 
#>  191 215 134 105 | 142 328 351 199 | 266 304 204 342 | 161 150 278 193 
#>  264 201 330 174 | 223 240 308 104 | 227 206 154 284 | 291 344 247 218 
#>  132 292 101 120 | 233 315 313 273 | 185 326 349 321 | 202 338 197 255 
#>  323 316 117 283 | 138 324 253 322 | 262 306 205 135 | 331 133 332 243