我有一个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?
的子集答案 0 :(得分:0)
列表:
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)
答案 1 :(得分:0)
我解决了这个问题,方法是更改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])