我是 R 和 stackoverflow 的新手,所以請原諒我的幼稚和可能的錯誤。我的目標是為以太坊交易創建交易細節資料框。我用于單筆交易的功能是:
library(devtools)
library(etherscanr)
devtools::install_github("dirkschumacher/etherscanr")
etherscan_transactions("0x3cd751e6b0078be393132286c442345e5dc49699")
函式括號中的數字是我需要詳細資訊的錢包地址。到目前為止,一切都很好。這作業得很好。但是,我需要為數千個地址執行此操作,這就是為什么我想在串列中回圈此函式。這就是我卡住并尋求您的幫助的地方。我嘗試了不同的方法,包括 lapply 和 for 回圈,看起來像這樣:
transto <- transaction_sample$to
for(i in 1:length(transto)) {
transtodetail <- etherscan_transactions(i)
}
這是我得到的錯誤: etherscan_transactions(i) 中的錯誤:is.character(account) is not TRUE
這是錢包地址串列的樣子:
head(transto)
[1] "0x3cd751e6b0078be393132286c442345e5dc49699"
[2] "0xdac17f958d2ee523a2206206994597c13d831ec7"
[3] "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"
[4] "0xdac17f958d2ee523a2206206994597c13d831ec7"
[5] "0xdac17f958d2ee523a2206206994597c13d831ec7"
[6] "0xdac17f958d2ee523a2206206994597c13d831ec7"
我很感激任何型別的提示。
uj5u.com熱心網友回復:
#' The data:
transto <- c("0x3cd751e6b0078be393132286c442345e5dc49699",
"0xdac17f958d2ee523a2206206994597c13d831ec7",
"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
"0xdac17f958d2ee523a2206206994597c13d831ec7",
"0xdac17f958d2ee523a2206206994597c13d831ec7",
"0xdac17f958d2ee523a2206206994597c13d831ec7")
使用修改/偽造的版本etherscan_transactions告訴你發生了什么:
fake_etherscan_transactions <- function(i_arg) print(i_arg)
for(i in 1:length(transto)) {
transtodetail <- fake_etherscan_transactions(i)
}
#> [1] 1
#> [1] 2
#> [1] 3
#> [1] 4
#> [1] 5
#> [1] 6
您將索引傳遞給etherscan_transactions()而不是每個索引處的值。
這里有一些解決方案。只需替換fake_etherscan_transactions為etherscan_transactions. 解決方案1:使用索引
for(i in 1:length(transto)) {
transtodetail <- fake_etherscan_transactions(transto[i])
}
#> [1] "0x3cd751e6b0078be393132286c442345e5dc49699"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"
#> [1] "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"
解決方案2:transto在for回圈中用作向量
for(i in transto) {
transtodetail <- fake_etherscan_transactions(i)
}
#> [1] "0x3cd751e6b0078be393132286c442345e5dc49699"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"
#> [1] "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"
解決方案 3:使用sapplyover transto(如 @Limey 建議的那樣)。
sapply(transto, fake_etherscan_transactions)
由reprex 包于 2022-06-11 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489167.html
上一篇:在python中同時迭代多個串列
