事先不知道变量名时访问 R6 class 变量?
Accessing R6 class variable when variable name is not known advance?
这是一个简单的代码,它说明了我想要实现的目标:
require(R6)
cTest <- R6Class(
"CTest",
public = list(
a = 10, b=20, c=30,
printX = function(x) {
print(self[x])
}
)
) #"CTest"
myClass <- cTest$new();
for (x in c("a","b", "c"))
myClass$printX("a")
而且它不起作用。错误信息:
"Error in self[x] : object of type 'environment' is not subsettable"
为了比较,lists/data.frames 的类似任务有效:
for (x in c("mpg","cyl", "hp"))
print(mtcars[x])
你能帮忙吗?
如果您使用双括号索引(即 print(self[[x]])
),这似乎工作正常。问题在于,通常单括号索引试图提取原始对象的 子集 ;相反,双括号索引提取原始对象的 元素 。例如,如果 L
是一个数字列表,L[x]
是一个子列表,而 L[[x]]
是一个数字。来自推特上的 Hadley Wickham:
这是一个简单的代码,它说明了我想要实现的目标:
require(R6)
cTest <- R6Class(
"CTest",
public = list(
a = 10, b=20, c=30,
printX = function(x) {
print(self[x])
}
)
) #"CTest"
myClass <- cTest$new();
for (x in c("a","b", "c"))
myClass$printX("a")
而且它不起作用。错误信息:
"Error in self[x] : object of type 'environment' is not subsettable"
为了比较,lists/data.frames 的类似任务有效:
for (x in c("mpg","cyl", "hp"))
print(mtcars[x])
你能帮忙吗?
如果您使用双括号索引(即 print(self[[x]])
),这似乎工作正常。问题在于,通常单括号索引试图提取原始对象的 子集 ;相反,双括号索引提取原始对象的 元素 。例如,如果 L
是一个数字列表,L[x]
是一个子列表,而 L[[x]]
是一个数字。来自推特上的 Hadley Wickham: