R中append()函数的行为不可理解

42fyovps  于 2023-04-09  发布在  其他
关注(0)|答案(2)|浏览(290)

我尝试在R中创建一个向量列表。使用以下代码:

companies <- list("AAPL", "MSFT")

columns <- list()

for (company in companies)
{
  column <- c(get_price(company), get_balance_sheet_data(company), get_ebit(company))
  columns <- append(columns, column)
}

每个“get_x”函数返回一个以double(s)作为值的向量。我希望“column”变量是一个包含子向量中所有值的向量,然后将该向量附加到名为“columns”的列表中。然而,这将返回一个列表,如下所示:

[[1]]
[1] 164.66

[[2]]
[1] 352755000

[[3]]
[1] 302083000

[[4]]
[1] 50672000

[[5]]
[1] 149631000

[[6]]
[1] 50672000

[[7]]
[1] 50672000

[[8]]
[1] -18577000

[[9]]
[1] 170741000

[[10]]
[1] 50672000

[[11]]
[1] 120069000

[[12]]
[1] 96423000

[[13]]
[1] 15943425

[[14]]
[1] 15943425

[[15]]
[1] 122034000

[[16]]
[1] 291.6

[[17]]
[1] 364840000

[[18]]
[1] 198298000

[[19]]
[1] 166542000

[[20]]
[1] 213574000

[[21]]
[1] 166542000

[[22]]
[1] 11489000

[[23]]
[1] 87720000

[[24]]
[1] 74602000

[[25]]
[1] 216323000

[[26]]
[1] 87720000

[[27]]
[1] 61270000

[[28]]
[1] 35850000

[[29]]
[1] 7464000

[[30]]
[1] 85779000

我想要的是一个列表,在索引1上包含一个“AAPL”的向量,在第二个索引上包含一个“MSFT”的向量,依此类推。
谢谢!
我尝试使用多个函数将向量追加到列表中,但没有任何帮助。我还将以前返回双精度的所有函数转换为返回内部具有单个值的向量(以便所有函数返回相同的数据类型-向量),但没有任何帮助。

vwkv1x7d

vwkv1x7d1#

而不是初始化,然后在for循环中执行append,它可以更容易地用lapply来完成,它返回一个list的向量。

companies <- list(AAPL = "AAPL", MSFT = "MSFT")
out <- lapply(companies, \(x) c(get_price(x), 
       get_balance_sheet_data(x), get_ebit(x)))

关于帖子中的问题,append做了它被要求做的事情,即它将元素追加到list。这里,column是一个长度为3的向量,它被追加为列中的3个单独的新条目。例如,

> append(list(), c(1, 2, 3))
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

使用for循环,

> columns <- list()
> for(i in 1:5) {column <- c(i, i, i); columns <- append(columns, column)}

相反,我们可能需要将column输出 Package 在list中,以将向量作为一个单元包含。

> columns <- list()
> for(i in 1:5) {column <- list(c(i, i, i)); columns <- append(columns, column)}
  • 输出
> columns
[[1]]
[1] 1 1 1

[[2]]
[1] 2 2 2

[[3]]
[1] 3 3 3

[[4]]
[1] 4 4 4

[[5]]
[1] 5 5 5
mkh04yzy

mkh04yzy2#

akrun的另一个解决方案是从lapply()生成输出,作为随后可以与rbind()组合的 Dataframe 列表。
companies〈- list(AAPL =“AAPL”,MSFT =“MSFT”)

set.seed(10317008)
out <- lapply(companies,function(x){
   data.frame(company = x,
              price = rnorm(1,500,45),
              balance_sheet_item = rnorm(1,20000,75),
              ebit = rnorm(1,2000000,30000000)) 
})

do.call(rbind,out)

...和输出:

> do.call(rbind,out )
     company    price balance_sheet_item     ebit
AAPL    AAPL 471.8496           19933.06 13230143
MSFT    MSFT 423.7655           19985.90 10544019
>

相关问题