Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用get()访问列表元素_String_R_List_Loops - Fatal编程技术网

String 使用get()访问列表元素

String 使用get()访问列表元素,string,r,list,loops,String,R,List,Loops,我正试图使用get()访问R中的列表元素,但遇到了一个错误 example.list以下是您可能正在寻找的咒语: get("attribute", example.list) # [1] "test" 或者,就您的情况而言,这可能是: get("attribute", eval(as.symbol("example.list"))) # [1] "test" # Applied to your situation, as I understand it... example.list2 &

我正试图使用
get()
访问R中的列表元素,但遇到了一个错误


example.list以下是您可能正在寻找的咒语:

get("attribute", example.list)
# [1] "test"
或者,就您的情况而言,这可能是:

get("attribute", eval(as.symbol("example.list")))
# [1] "test"

# Applied to your situation, as I understand it...

example.list2 <- example.list 
listNames <- c("example.list", "example.list2")
sapply(listNames, function(X) get("attribute", eval(as.symbol(X))))
# example.list example.list2 
#       "test"        "test" 
get(“属性”,eval(as.symbol(“example.list”))
#[1]“测试”
#适用于你的情况,据我所知。。。

example.list2如果字符串包含的不仅仅是对象名称,例如,像这里这样的运算符,则可以将其作为表达式进行计算,如下所示:

> string <- "example.list$attribute"
> eval(parse(text = string))
[1] "test"
为什么不简单地:

example.list <- list(attribute="test")
listName <- "example.list"
get(listName)$attribute

# or, if both the list name and the element name are given as arguments:
elementName <- "attribute"
get(listName)[[elementName]]

example.listflodel的答案适用于我的应用程序,因此我将发布我在其上构建的内容,尽管这非常缺乏灵感。您可以使用
for
循环访问每个列表元素,如下所示:

#==============  List with five elements of non-uniform length  ================#
example.list=
list(letters[1:5], letters[6:10], letters[11:15], letters[16:20], letters[21:26])
#===============================================================================#
#======  for loop that names and concatenates each consecutive element  ========#
derp=c();            for(i in 1:length(example.list))
{derp=append(derp,eval(parse(text=example.list[i])))}
derp #Not a particularly useful application here, but it proves the point.
我将这样的代码用于一个函数,该函数通过列名从数据帧调用某些列集。用户输入一个包含元素的列表,每个元素表示不同的列名集(每组是属于一个度量值的一组项目),以及包含所有这些列的大数据框架。
for
循环将每个连续列表元素应用为内部函数*的列名集,仅应用于大数据框架当前命名的列集。然后,它用大数据帧子集的输出填充矩阵中每个循环的一列,该子集对应于该循环编号对应的列表元素中的名称。在
for
循环之后,函数通过输出它生成的矩阵结束

不确定您是否希望对列表元素执行类似的操作,但我很高兴我学会了这个技巧。谢谢大家的想法

“第二个示例”/“关于分级响应模型因子评分应用的切向信息”:

这是我上面描述的函数,以防有人想大批量计算分级反应模型因子得分*。输出矩阵的每一列对应于列表的一个元素(即,列表元素中的列名称指定的具有顺序指示项的潜在特征),所述行对应于用作输入的数据帧的行。每一行大概都应该包含相互依赖的观察结果,例如来自给定个体的观察结果,输出矩阵同一行中的因子得分属于该个体。此外,我觉得我应该补充一点,如果给定列表元素中的所有项目使用完全相同的Likert量表评级选项,那么分级反应模型可能比评级量表模型(cf.)更不适合因子评分

参考


*Rizopoulos,D.(2006年)。ltm:潜在变量建模和项目反应理论分析的R包,统计软件杂志,17(5),1-25。URL:

出现错误的原因是
示例。list$attribute
不是对象,但它是将运算符(
$
,又名Extract,try-
“backtick”
$
“backtick”)应用于对
(示例.list,attribute)的结果
。您的第一个示例对我很有用,这是最有效的方法还是唯一的方法?我有一个列表,只能通过mylist[[1]][1]或mylist[[1]]$elementname访问。
#==============  List with five elements of non-uniform length  ================#
example.list=
list(letters[1:5], letters[6:10], letters[11:15], letters[16:20], letters[21:26])
#===============================================================================#
#======  for loop that names and concatenates each consecutive element  ========#
derp=c();            for(i in 1:length(example.list))
{derp=append(derp,eval(parse(text=example.list[i])))}
derp #Not a particularly useful application here, but it proves the point.
'grmscores'=function(ColumnNameList,DataFrame)   {require(ltm) #(Rizopoulos,2006)
x = matrix ( NA , nrow = nrow ( DataFrame ), ncol = length ( ColumnNameList ))
for(i in 1:length(ColumnNameList)) #flodel's magic featured below!#
{x[,i]=factor.scores(grm(DataFrame[,    eval(parse(text=   ColumnNameList[i]))]),
resp.patterns=DataFrame[,eval(parse(text= ColumnNameList[i]))])$score.dat$z1}; x}