[英]Can I use names from a list/dataframe, to be recognised as list/dataframe name within R script for a loop function?
[英]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.