![](/img/trans.png)
[英]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.