【问题标题】:Subset my R list by character vector from dataframe通过数据帧中的字符向量对我的 R 列表进行子集
【发布时间】:2018-09-07 06:00:43
【问题描述】:

我有一个 r 对象,'d' 是一个列表。我想要一个引用此列表子集的数据框作为函数“myfunction”的变量。该函数将使用 rslurm 调用数千次,每次使用 d 的不同子集。

示例:d[['1']][[3]] 引用列表中的数据矩阵。

myfunction(d[['1']][[3]]) 

工作正常,但我希望能够从数据帧中调用这些子集。

我希望能够拥有一个数据框“ds”,其中包含我所有的子集引用。

>ds
              d
1 d[['1']][[3]]
2 d[['1']][[4]]

>myfunction(get(ds[1,1]))
Error in get(ds[1, 1]) : object 'd[['1']][[3]]' not found

有没有像'get'这样的东西可以让我调用我的对象的一个​​子集,d? 或者我可以在 'myfunction' 中添加一些东西来澄清这个字符串引用了 d 的一个子集?

stack_overflow 'get'

【问题讨论】:

    标签: r list object dataframe subset


    【解决方案1】:

    列表

    my_list <- c('peanut', 'butter', 'is', 'amazing')
    

    包含子集引用数据框

    my_dataframe <- data.frame(keys=c("my_list[[1]]", "my_list[[2]]", "my_list[[3]]", "my_list[[4]]"), stringsAsFactors=F)
    

    一个函数,根据传递的值从列表中提取值:

    my_function <- function(key, my_list) {
        from_list <- eval(parse(text=key))
        print(from_list)
    }
    

    通过传入数据框行选择和列表从列表中获取值

    my_function(my_dataframe[1,1], my_list)
    

    【讨论】:

      【解决方案2】:

      我通过将 myfunction 更改为采用两个变量 c 和 w 并在更新后的函数的第一行中使用括号表示法定义 d 来解决这个问题。我的 ds 现在有两个变量 c 和 w,变量 c 定义为 as.character 并且它可以工作!

      myfunction(c,w) {
      d<-d[[c]][[w]]
      ....rest of function}
      
      >ds
       c w
      1 1 3
      2 1 4
      
      >test <- myfunction(ds[1,1],ds[1,2])
      

      【讨论】:

        猜你喜欢
        • 2021-12-16
        • 2013-04-24
        • 2016-12-01
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-21
        • 1970-01-01
        相关资源
        最近更新 更多