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"