我在这里很新,所以提前感谢您的帮助。我正在尝试对整个比特币交易链进行一些分析。为了做到这一点,我正在尝试创建 2 个表
1)所有比特币地址及其余额的完整列表,即:
| 身份证 | 地址 | 余额 | ------------------------------------------- | 1 | 7d4kExk... | 32 | | 2 | 9Eckjes... | 0 | | . | ... | ... |
2) 记录比特币网络中任意两个地址之间曾经发生过的交易次数
| 身份证 | 发件人 | 接收器 | 交易 | -------------------------------------------------- | 1 | 7d4kExk... | klDk39D... | 2 | | 2 | 9Eckjes... | 7d4kExk... | 3 | | . | ... | ... | .. |
为此,我在 R 中编写了一个(可能效率非常低的)脚本,该脚本循环遍历每个块并抓取 blockexplorer.com 以编译表。到目前为止,我已经尝试运行了几次,但遇到了两个主要问题
1 - 非常慢...我可以想象它至少需要一个星期的速度
2 - 如果它没有挂起,我无法运行它超过一两天。它似乎只是冻结了 RStudio。
我真的很感谢您在两个方面的帮助:
1 - 在 R 中是否有更好的方法来使代码运行得更快?
2 - 我应该完全停止使用 R 并尝试不同的方法吗?
在此先感谢您的帮助!请参阅下面的相关代码块我正在使用
url_start <- "http://blockexplorer.com/b/"
url_end <- ""
readUrl <- function(url) {
table <- try(readHTMLTable(url)[[1]])
if(inherits(table,"try-error")){
message(paste("URL does not seem to exist:", url))
errors <- errors + 1
return(NA)
} else {
processed <- processed + 1
return(table)
}
}
block_loop <- function (end, start = 0) {
...
addr_row <- 1 #starting row to fill out table
links_row <- 1 #starting row to fill out table
for (i in start:end) {
print(paste0("Reading block: ",i))
url <- paste(url_start,i,url_end, sep = "")
table <- readUrl(url)
if(is.na(table)){ next }
....