在R中使用get()和paste()从列表中提取项目

在R中使用get()和paste()从列表中提取项目,r,R,我有一张六个人的名单,每个人有25个数字。数据在这里 通过dput() 我试图使用get()和paste()返回for()循环中每个个体的编号 我可以直接用下面的代码在循环外完成这项工作 data$AAA 或 然而,我需要在一个循环中调用这些数字。我首先创建了一个名为的对象 Name <- c("AAA","BBB", "CCC", "DDD", "EEE", "FFF") 但是,在get()中包装相同的代码时,不会返回项目 错误结果如下所示 get(paste("data$", Na

我有一张六个人的名单,每个人有25个数字。数据在这里 通过dput()

我试图使用
get()
paste()
返回for()循环中每个个体的编号

我可以直接用下面的代码在循环外完成这项工作

data$AAA

然而,我需要在一个循环中调用这些数字。我首先创建了一个名为的对象

Name <- c("AAA","BBB", "CCC", "DDD", "EEE", "FFF")
但是,在get()中包装相同的代码时,不会返回项目 错误结果如下所示

get(paste("data$", Name[1], sep=""))

> get(paste("data$", Name[1], sep=""))
Error in get(paste("data$", Name[1], sep = "")) : 
  object 'data$AAA' not found
虽然
data$AAA
是列表中的一项而不是对象,但为什么在
get()
paste()
之外运行时返回值,但在使用
get()
paste()
运行时却找不到

有没有更好的方法从列表中提取项目

在for()循环中,我需要提取每个单独AAA:FFF的数字,并对它们进行重新采样以获得引导


谢谢您的建议。

函数
get
可用于返回对象。在您的例子中,
data
是一个对象,但是
data$AAA
不返回对象,而是返回一个列表元素

要访问循环中的列表元素,可以使用名称向量
name
,也可以将整数与函数
[
结合使用

data[[Name[1]]]

data[[1]]
此外,如果希望在循环中使用所有列表元素,则不需要列表元素的名称。这可以通过使用,例如,
lappy

lapply(data, sample)

上面的命令是一种简单的方法,可以改变列表元素中值的顺序。

不要使用
$
进行编程。(这是一个多次重复的问题。)答案是使用
[[
。并且不要在
get
中使用它们中的任何一个。语言对象不是字符向量。
lappy(data,sample,replace=TRUE)
将使用replace对每个人的数据进行重新采样。@dwn.感谢您的评论和一般建议。我还使用了[[],而不是$,得到了相同的结果。我的问题是在get()中使用[[或$)更准确的说法是,
data$AAA
不是一个对象,而是一个未计算的函数调用。如果对它进行计算,它可能会返回一个列表元素。
paste("data$", Name[1], sep="")
> paste("data$", Name[1], sep="")
[1] "data$AAA"
get(paste("data$", Name[1], sep=""))

> get(paste("data$", Name[1], sep=""))
Error in get(paste("data$", Name[1], sep = "")) : 
  object 'data$AAA' not found
data[[Name[1]]]

data[[1]]
lapply(data, sample)