在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