簡體   English   中英

如何使用列表項作為 R 循環中函數的輸入?

[英]How can I use items of a list as input for a function in a loop in R?

我是 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"
    

我很感激任何類型的提示。

  #' 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:在for循環中使用transto作為向量

for(i in transto) {
  transtodetail <- fake_etherscan_transactions(i)
}
#> [1] "0x3cd751e6b0078be393132286c442345e5dc49699"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"
#> [1] "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"
#> [1] "0xdac17f958d2ee523a2206206994597c13d831ec7"

解決方案 3:在transto sapply如@Limey 建議的那樣)。

sapply(transto, fake_etherscan_transactions)

reprex 包於 2022-06-11 創建 (v2.0.1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM