我想要两个不同的事件来触发我的应用程序中各种图表/输出所使用的数据的更新.一个是单击按钮(input$spec_button),另一个是点击点上的点(mainplot.click$click).
基本上,我想同时列出两者,但我不知道如何编写代码.这就是我现在拥有的:
在server.R中:
data <- eventReactive({mainplot.click$click | input$spec_button}, {
if(input$spec_button){
# get data relevant to the button
} else {
# get data relevant to the point clicked
}
})
Run Code Online (Sandbox Code Playgroud)
但if-else子句不起作用
Error in mainplot.click$click | input$spec_button :
operations are possible only for numeric, logical or complex types
- >我可以使用某种动作组合器功能用于该mainplot.click$click | input$spec_button子句吗?
Say df是一个熊猫数据帧.
df.loc[] 只接受名字 df.iloc[] 只接受整数(实际展示位置)df.ix[] 接受名称和整数:引用行时,df.ix[row_idx, ]只想获得名称.例如
df = pd.DataFrame({'a' : ['one', 'two', 'three','four', 'five', 'six'],
'1' : np.arange(6)})
df = df.ix[2:6]
print(df)
1 a
2 2 three
3 3 four
4 4 five
5 5 six
df.ix[0, 'a']
Run Code Online (Sandbox Code Playgroud)
抛出错误,它不会返回'两个'.
在引用列时,iloc更喜欢整数,而不是名称.例如
df.ix[2, 1]
Run Code Online (Sandbox Code Playgroud)
返回'三',而不是2.(虽然df.idx[2, '1']确实返回2).
奇怪的是,我想要完全相反的功能.通常我的列名非常有意义,所以在我的代码中我直接引用它们.但是由于大量的观察清理,我的pandas数据框中的行名通常不对应range(len(df)).
我意识到我可以使用:
df.iloc[0].loc['a'] # returns three
Run Code Online (Sandbox Code Playgroud)
但它看起来很难看!有没有人知道更好的方法来做到这一点,所以代码看起来像这样?
df.foo[0, 'a'] # returns three
Run Code Online (Sandbox Code Playgroud)
事实上,是否有可能将自己的新方法添加到pandas.core.frame.DataFrames,所以例如
df.idx(rows, cols)实际上是df.iloc[rows].loc[cols]?
我已经使用RStudio多年了,这在我之前从未发生过.出于某种原因,每次函数抛出错误时,RStudio都会进入调试模式(我不希望它).即使在单个函数上使用undebug()之后也是如此.
> undebug(http.get)
Warning message:
In undebug(fun) : argument is not being debugged
> x = http.get(country = 'KE')
http --timeout=60 get "http://foo@bar.com/observation?country=KE" > freshobs.json </dev/null
Error in fromJSON(file = "freshobs.json") : unexpected character 'O'
Error in el[["product_name"]] : subscript out of bounds
Called from: grepl(el[["product_name"]], pattern = "json:", fixed = T)
Browse[1]> Q
Run Code Online (Sandbox Code Playgroud)
我使用的任何函数都会导致调试模式启动 - 这非常烦人,因为它打开了一个源查看器并让您远离代码.有谁知道如何停止这项功能?如果在"首选项"中的"仅在我的代码包含错误时使用调试模式"复选框中并且未选中,则会发生这种情况.
谢谢!
如何删除RStudio绘图设备中的当前(但不是全部)图?
dev.off()将删除所有的情节,但如果我只想删除一个?我不想按下那个红色的'x'按钮,因为我想在不按下按钮的情况下删除一个图.
我有一个很大的数据帧,我正在按1到n列分组,并希望在两列(例如foo和bar)上对这些组应用函数.
这是一个示例数据帧:
foo_function = lambda x: np.sum(x.a+x.b)
df = pd.DataFrame({'a':[1,2,3,4,5,6],
'b':[1,2,3,4,5,6],
'c':['q', 'q', 'q', 'q', 'w', 'w'],
'd':['z','z','z','o','o','o']})
# works with apply, but I want transform:
df.groupby(['c', 'd'])[['a','b']].apply(foo_function)
# transform doesn't work!
df.groupby(['c', 'd'])[['a','b']].transform(foo_function)
TypeError: cannot concatenate a non-NDFrame object
Run Code Online (Sandbox Code Playgroud)
但transform显然无法将多个列组合在一起,因为它分别查看每个列(与apply不同).在速度/优雅方面,下一个最佳选择是什么?例如,我可以使用apply,然后df['new_col']通过使用创建pd.match,但这将需要匹配有时多个groupby列(col1和col2),这似乎真的很hacky /将需要相当数量的代码.
- >是否有一个类似groupby().变换的函数可以使用多个列的函数?如果这不存在,最好的黑客是什么?
我一直在测试Google的Vision API,以便为不同的图像添加标签.
对于给定的图像,我会得到这样的东西:
"google_labels": {
"responses": [{
"labelAnnotations": [{
"score": 0.8966763,
"description": "food",
"mid": "/m/02wbm"
}, {
"score": 0.80512983,
"description": "produce",
"mid": "/m/036qh8"
}, {
"score": 0.73635191,
"description": "juice",
"mid": "/m/01z1kdw"
}, {
"score": 0.69849229,
"description": "meal",
"mid": "/m/0krfg"
}, {
"score": 0.53875387,
"description": "fruit",
"mid": "/m/02xwb"
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
- >我的问题是:
['produce', 'meal', ...])以及我在哪里可以找到它?我猜是'不'和'不'因为我找不到任何东西,但是,也许不是.谢谢!
我正在使用roxygen创建自己的包.我有一个导致问题的功能:
##' extract.sig.metadata
##' @param foo bar
##' @author me
##' @export
extract.sig.metadata <- function(foo){
# does stuff
}
Run Code Online (Sandbox Code Playgroud)
我已经创建了我的包骨架(使用devtools的create(my-package)),并且我使用了document()来处理roxygen标签.但是,当我尝试安装我的软件包时,它会失败:
... *安装帮助索引**构建软件包索引**测试是否可以加载已安装的软件包错误:加载命名空间'my-package'时找不到对象'extract'错误:加载失败执行停止
我很确定roxygen认为extract.sig.metadata是一个S3方法,即一种特殊形式的export(),但它没有找到函数export(),所以它正在破坏.但这不是一个s3方法,它只是一个名为extract.sig.metadata的函数.如果我查看Rd代码,/ usage标记看起来很奇怪:
\usage{
\method{extract}{sig.metadata}(spec.df, var = "product_name",
ratio.cutoff = 0.001, prob.modifer = 3, frequency.cutoff = NA,
verbose = F, assign.to.global.env = FALSE, use.bigrams = T, clean = T,
ngram.dupe.n.cutoff = 0.1, max.obs = 10000)
}
Run Code Online (Sandbox Code Playgroud)
如果我确实将名称更改为extractSigMetadata,则问题在技术上已得到修复,并且.Rd代码会更改,
\usage{
extractSigMetadata(foo)
}
Run Code Online (Sandbox Code Playgroud)
但我真的不想改变我的函数的名称(我的包中有几十个函数有相同的问题,并且它们被用在一堆脚本中 - 改变我的命名将是一个巨大的痛苦架构不).
--->有谁知道我怎么能告诉roxygen这只是一个正常的函数而不是奇怪的s3方法?我猜它与@method标签有关,但我不知道如何正确使用它来使这项工作.谢谢!!!
我知道你可以使用"\"来转义特殊字符,但我很有兴趣创建将包含特殊字符的终端命令,这些命令无法很好地读取反斜杠.
作为一个简单的例子,我想要一个看起来像这样的命令:
echo hello "w" or'l'd
Run Code Online (Sandbox Code Playgroud)
这可以通过类似的东西来实现
system(command="""echo hello "w" or'l'd""")
Run Code Online (Sandbox Code Playgroud)
但R不处理三重引号.还有另外一种方法吗?即使从cat()捕获输出也没关系.例如newCommand = cat("echo hello \"w \"orld")
谢谢.
好的,所以说我有一个pandas数据帧x,我有兴趣从中提取一个值:
> x.loc[bar==foo]['variable_im_interested_in']
Run Code Online (Sandbox Code Playgroud)
假设返回以下类型为pandas.core.series.Series:
24 Boss
Name: ep_wb_ph_brand, dtype: object
Run Code Online (Sandbox Code Playgroud)
但我想要的只是字符串'Boss'.包装第一行代码str()也无济于事,我得到:
'24 Boss\nName: ep_wb_ph_brand, dtype: object'
Run Code Online (Sandbox Code Playgroud)
我如何提取字符串?
我正在尝试在pyCharm python解释器中导入pandas,但我一直在变得可怕
>>> import pandas
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
ImportError: No module named pandas
Run Code Online (Sandbox Code Playgroud)
当我从终端运行python时它工作正常.我已经阅读了这方面的解决方案,但到目前为止还没有工作.我已经重新安装,重新安装和更新了大熊猫.我已经将pyCharm项目的python解释器和默认的pyCharm python解释器更改为"2.7.5(/ usr/local/bin/python)",所以现在:
>>> os.system('which python')
/usr/local/bin/python
Run Code Online (Sandbox Code Playgroud)
发生在pycharm解释器和终端python解释器中.
有关如何解决此问题的更多想法?
谢谢