我已经创建了一个实用程序R脚本util.R,我想从我项目中的其他脚本中使用它.确保此脚本定义的函数可用于我的其他脚本的正确方法是什么?
我正在寻找类似于require
函数的东西,它只在尚未加载的情况下加载一个包.我不想打电话,source("util.R")
因为每次调用脚本都会加载脚本.
我知道我会得到一些答案,告诉我创建一个包,就像在组织R源代码中一样 :)但我不会创建一些将在其他地方使用的东西,它只是一个独立的项目.
我发现Hadley 对R 的plyr包非常有帮助,它是一个用于转换数据的优秀DSL.解决的问题是如此常见,以至于在不操作R中的数据时,我会面对其他用例,但在其他编程语言中.
有谁知道是否存在一个为python做类似事情的模块?就像是:
def ddply(rows, *cols, op=lambda group_rows: group_rows):
"""group rows by cols, then apply the function op to each group
and return the results aggregating all groups
rows is a dict or list of values read by csv.reader or csv.DictReader"""
pass
Run Code Online (Sandbox Code Playgroud)
实施起来应该不会太难,但如果已经存在则会很好.我实现它,我用itertools.groupby
它分组cols
,然后应用op
函数,然后使用itertools.chain将它全部链接起来.有更好的解决方案吗?
说我有一个TodoStore.TodoStore负责保存我的TODO物品.Todo项目存储在数据库中.
我想知道将所有待办事项加载到商店中的推荐方法是什么以及视图应如何与商店交互以在启动时加载TODO项目.
第一种方法是创建一个loadTodos
动作,从数据库中检索Todos并发出一个TODOS_LOADED
事件.然后,视图将调用该loadTodos
操作,然后侦听该TODOS_LOADED
事件,然后通过调用自行更新TodoStore.getTodos()
.
另一种选择是没有loadTodos
动作,并且具有TodoStore.getTodos()
将返回现有TODO项目的承诺.如果TodoStore已经加载了TODO项目,它只返回它们; 如果没有,那么它将从数据库中查询并返回检索到的项目.在这种情况下,即使商店现在已经加载了TODO项目,它也不会发出TODOS_LOADED事件,因为getTodos
它不是一个动作.
function getTodos() {
if (loaded)
return Promise.resolve($todoItems);
else
return fetchTodoItemsFromDatabase().then(todoItems) {
loaded = true;
$todoItems = todoItems;
return $todoItems;
});
}
Run Code Online (Sandbox Code Playgroud)
我相信很多人会说这会打破Flux体系结构,因为getTodos
函数正在改变存储状态,只有通过调度程序发送的操作才能更改存储状态.
但是,如果您认为TodoStore的状态是数据库中现有的TODO项,那么getTodos
实际上并没有改变任何状态.TODO项目完全相同,因此不需要更新或通知视图.唯一的事情是,现在商店已经检索了数据,因此它现在缓存在商店中.从View的角度来看,它不应该真正关心Store的实现方式.如果商店仍然需要从数据库中检索数据,它应该不在乎.所有关注的视图都是他们可以使用Store来获取TODO项目,并且Store会在创建,删除或更改新TODO项目时通知他们.
因此,在这种情况下,视图应该只调用TodoStore.getTodos()在加载时呈现自己,并在TODO_CHANGE上注册事件处理程序,以便在需要由于添加,删除或更改而自行更新时得到通知.
您如何看待这两种解决方案?他们还有其他解决方案吗?
我很难理解为什么这不起作用.
df <- data.frame(a=1:10, b=1:10)
foo <- function(obj, col) {
with(obj, ls())
with(obj, print(col))
}
foo(df, a)
Run Code Online (Sandbox Code Playgroud)
[1]"a""b"
打印错误(col):找不到对象'a'
如果这确实有效:
with(df, print(a))
Run Code Online (Sandbox Code Playgroud) 好的,我们正在开发一个网络相关的应用程序,用户可以上传自己的python脚本来决定算法.我们的代码包含c和cython和python模块.
由于避免延迟,内存占用和最少的处理对我们来说至关重要,我们想知道关闭垃圾收集和处理内存释放是否明智有效(性能明智).
python garbage-collection memory-leaks memory-management cython
我想用我可以插入类的方法创建轻量级接口.这是Scala中的一个简短示例:
class DB {
def find(id: String) = ...
}
trait Transformation extends DB {
def transform(obj: String): String
override def find(id: String) =
transform(super.find(id))
}
trait Cache extends DB {
val cache = Cache()
override def find(id: String) = {
...
if (cache.contains(id))
cache.find(id)
else {
cache.set(id, super.find(id))
cache.get(id)
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用这些类(特征),我们可以使用Transformation,使用Cache或两者来实例化DB类.请注意,Transformation有一个抽象方法转换,仍然需要在具体类中实现.
new DB() with Transformation {
def transform(obj: String): obj.toLower()
}
new DB() with Cache
new DB() with Transformation with Cache {
def transform(obj: String): obj.toLower()
} …
Run Code Online (Sandbox Code Playgroud) 我有一个使用Facebook的Flux架构开发的网络应用程序.该页面有两个视图:一个显示TODO项目列表.第二个视图显示一组随机的TODO项目.
显然,商店需要管理两个问题.第一个是可用的TODO列表.第二个是随机选择的TODO项目列表.
因此TODOStore
,我有一个,他唯一关心的是管理可用的TODO项目.它有行动loadTODOs
,addTODO
,deleteTODO
,editTODO
.在启动时,此商店不会加载所有TODO项目.我希望它仅在必要时从数据库中检索TODO项目列表.
第二家商店是RandomTODOListStore
.它的职责是管理随机选择的TODO项目.在我看来RandomTODOListStore
应该通过TODOStore
使用来访问TODO项目TODOStore.getTODOItems()
.
function RandomTODOListStore() {
var $randomTODOs = [];
dispatcher.register(function(payload) {
var action = payload.action;
switch (action.actionType) {
case Constants.LOAD_RANDOM_TODO:
loadRandomTODO();
break;
}
});
function loadRandomTODO() {
$randomTODOs = selectRandom(TODOStore.getTODOList());
emit("change");
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题是,如前所述,TODOStore
它不会在启动时加载TODO项目.
问题是:"如何RandomTODOListStore
保证TODOStore
已经检索到TODO项目?" .
我正在编写一个函数,我想提供一个变量,其中包含要在函数内部进行求值的条件.例如,我有一个小时变量,包含0,3,6,9,18,3,6,9,18,0,18等值...我想选择小时变量匹配为0,6的索引这个0,6可能会根据其他一些参数而改变.基本上它们并不总是固定的.所以我传递一个变量g1 = call("which", (hourval==0 | hourval == 6))
.我希望在程序中评估此语句.因此我使用该声明x1 = eval(g1)
.显然,当我传递变量时g1
,不会生成那个时间的小时变量,而是在eval(g1)
语句之前生成它.我收到错误,hourval
找不到对象.有没有其他方法可以解决这个问题.
在此先感谢,任何帮助表示赞赏.
Narayani Barve
r ×4
python ×3
reactjs-flux ×2
call ×1
cython ×1
eval ×1
flux ×1
javascript ×1
memory-leaks ×1
plyr ×1
scala ×1