R写入二进制数据
我有三个相同维度的大向量。我需要以一定的顺序将它们写入二进制文件:两个整数后跟一个双精度。 例如:R写入二进制数据,r,R,我有三个相同维度的大向量。我需要以一定的顺序将它们写入二进制文件:两个整数后跟一个双精度。 例如: a您可以从这3个向量中生成1个向量: list(a, b, d) %>% purrr::transpose() %>% unlist() 但那个向量将是数值的: [1] 1.000000 5.000000 1.324210 2.000000 6.000000 1.423421 3.000000 7.000000 [9] 21.412341 4.000000
a您可以从这3个向量中生成1个向量:
list(a, b, d) %>%
purrr::transpose() %>%
unlist()
但那个向量将是数值的:
[1] 1.000000 5.000000 1.324210 2.000000 6.000000 1.423421 3.000000 7.000000
[9] 21.412341 4.000000 8.000000 1.123412
您可以rbind
矢量以获得所需顺序的矢量
c(rbind(a, b, d))
#Similar to
#c(t(cbind(a, b, d)))
#[1] 1.00 5.00 1.32 2.00 6.00 1.42 3.00 7.00 21.41 4.00 8.00 1.12
请注意,向量中只能有一个类的数据。所以在这个例子中,它们都变成了数字。我们可以用顺序来做,当长度不一样时,它也应该起作用
c(a, b, d)[order(c(seq_along(a), seq_along(b), seq_along(d)))]
#[1] 1.000000 5.000000 1.324210 2.000000 6.000000 1.423421 3.000000 7.000000 21.412341 4.000000 8.000000 1.123412
这就是spintf的工作:
decimals <- nchar(d) - nchar(floor(d)) - 1
sprintf(paste0("%i, %i, ", "%.", decimals, "f"), a, b, d)
[1] "1, 5, 1.32421" "2, 6, 1.42342134123" "3, 7, 21.4123412361"
[4] "4, 8, 1.123412346"
如果将元素视为字符,则可以使用“%s”
(即sprint(“%s,%s,%s”,a,b,d)
)代替“%i”
和“%f”
c(a, b, d)[order(c(seq_along(a), seq_along(b), seq_along(d)))]
#[1] 1.000000 5.000000 1.324210 2.000000 6.000000 1.423421 3.000000 7.000000 21.412341 4.000000 8.000000 1.123412
decimals <- nchar(d) - nchar(floor(d)) - 1
sprintf(paste0("%i, %i, ", "%.", decimals, "f"), a, b, d)
[1] "1, 5, 1.32421" "2, 6, 1.42342134123" "3, 7, 21.4123412361"
[4] "4, 8, 1.123412346"
unlist(strsplit(sprintf(paste0("%i,%i,", "%.", decimals, "f"), a, b, d), ","))
[1] "1" "5" "1.32421" "2"
[5] "6" "1.42342134123" "3" "7"
[9] "21.4123412361" "4" "8" "1.123412346"